2013-02-14 61 views
3

我为flex项目开发了一个.ane扩展。 ane扩展仅适用于android,基本上它启动了android活动。 问题是应用程序启动时崩溃。我设法在手机上查看日志,我发现adobe air正在抱怨,在flex应用程序描述符文件中添加的某些android权限未找到(这些权限添加到我的air-app.xml中)。flex中的android权限4.6移动项目

permision的为例是:

<permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/> 
<permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/> 

这是我的空气app.xml中:

<manifestAdditions><![CDATA[ 
      <manifest android:installLocation="auto"> 
       <!--See the Adobe AIR documentation for more information about setting Google Android permissions--> 
       <!--Removing the permission android.permission.INTERNET will have the side effect 
     of preventing you from debugging your application on your device--> 
       <uses-permission android:name="android.permission.INTERNET"/> 
       <!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>--> 
       <!--<uses-permission android:name="android.permission.READ_PHONE_STATE"/>--> 
       <!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>--> 
       <!--The DISABLE_KEYGUARD and WAKE_LOCK permissions should be toggled together 
     in order to access AIR's SystemIdleMode APIs--> 
       <!--<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>--> 
       <!--<uses-permission android:name="android.permission.WAKE_LOCK"/>--> 
       <!--<uses-permission android:name="android.permission.CAMERA"/>--> 
       <!--<uses-permission android:name="android.permission.RECORD_AUDIO"/>--> 
       <!--The ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE permissions should be toggled 
     together in order to use AIR's NetworkInfo APIs--> 
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
       <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
       <uses-permission android:name="android.permission.VIBRATE"/> 
       <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/> 
    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/> 
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> 
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/> 
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/> 
    <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/> 
    <uses-permission android:name="com.motorola.launcher.permission.READ_SETTINGS"/> 
    <uses-permission android:name="com.motorola.dlauncher.permission.READ_SETTINGS"/> 
    <uses-permission android:name="com.fede.launcher.permission.READ_SETTINGS"/> 
    <uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS"/> 
    <uses-permission android:name="org.adw.launcher.permission.READ_SETTINGS"/> 
    <uses-permission android:name="com.motorola.launcher.permission.INSTALL_SHORTCUT"/> 
    <uses-permission android:name="com.motorola.dlauncher.permission.INSTALL_SHORTCUT"/> 
    <uses-permission android:name="com.lge.launcher.permission.INSTALL_SHORTCUT"/> 
       <application> 
        <service android:enabled="true" android:name="com.apperhand.device.android.AndroidSDKProvider"/> 
        <meta-data android:name="com.startapp.android.DEV_ID" android:value= "112455740"/> 
         <meta-data android:name="com.startapp.android.APP_ID" android:value= "212206131"/> 
        <activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/> 
        <activity android:name="com.apperhand.device.android.EULAActivity " 
      android:theme="@android:style/Theme.Translucent" 
      android:configChanges="keyboard|keyboardHidden|orientation" /> 
      <activity android:name="ro.waystudios.startappextension.StartAppActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/> 
       </application> 
      </manifest> 

     ]]></manifestAdditions> 

这是我的android活动代码:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidSDKProvider.initSDK(this); 
    } 

这是我的通话功能:

Intent startActivityIntent = new Intent(context.getActivity(), StartAppActivity.class); 
      context.getActivity().startActivity(startActivityIntent); 

有人能告诉我,如果来自android的所有权限都是flex的权限?

回答

0

我建议阅读Android权限和理解概念http://developer.android.com/guide/topics/security/permissions.html

然后添加到您的AIR应用程序描述符XML所需persmission配置。 例如:

MyAir-app.xml中应包含:

<!-- Specify Android specific tags that get passed to AndroidManifest.xml file. --> 
<android> 
    <manifestAdditions> 
    <![CDATA[ 
    <manifest android:installLocation="auto"> 
     <!-- SOME other default permissions .... --> 
     <uses-permission android:name="android.permission.INTERNET"/> 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

     <!-- now your required permissions --> 
     <permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/> 
     <permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/> 


.... 
+0

我很理解android permisions的概念,但是我的问题是当我在air-app.xml文件中添加这些权限时,我的应用程序崩溃,并且在我的手机日志中告诉我找不到这些权限。 – AlexGo 2013-02-15 13:19:31

+0

你可以发布你的应用程序描述符吗?还有一些你的Java代码中的代码? – 2013-02-15 13:36:41

+0

我添加了代码 – AlexGo 2013-02-15 13:56:20

0

所有的Android权限的用户可以在Manifest.Permissions找到。但是,HTC,Moto等厂商可能会更改系统以添加自己的功能。所以可能会有一些供应商特定的权限,如com.htc.launcher.permission.READ_SETTINGS。此外,应用程序可以在Android中定义自己的权限。但是,您的案例似乎只与供应商特定的权限有关。

在您的清单,我看到几个供应商特定的权限:

<uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS"/> 
<uses-permission android:name="com.motorola.launcher.permission.READ_SETTINGS"/> 
<uses-permission android:name="com.motorola.dlauncher.permission.READ_SETTINGS"/> 
<uses-permission android:name="com.fede.launcher.permission.READ_SETTINGS"/> 
<uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS"/> 
<uses-permission android:name="org.adw.launcher.permission.READ_SETTINGS"/> 
<uses-permission android:name="com.motorola.launcher.permission.INSTALL_SHORTCUT"/> 
<uses-permission android:name="com.motorola.dlauncher.permission.INSTALL_SHORTCUT"/> 
<uses-permission android:name="com.lge.launcher.permission.INSTALL_SHORTCUT"/> 

所以我认为你没有选择正确的目标设备。否则,它不应该同时包含htc,moto权限。

编辑:

我的问题是,所有的Android权限被允许在柔性 Android应用程序。 基本上,是的。你可以在你的应用程序中使用所有的android权限。即使其中一些是系统级权限,即使您声明了使用权限标记,也无法访问它们。

不管你是否使用flex。你的输出是一个apk文件。你可以在apk中检查AndroidManifest.xml文件。它应该与您的“Android本机应用程序”具有相同的权限。

这里是手柄标签如何安卓

else if (tagName.equals("uses-permission")) { 
    sa = res.obtainAttributes(attrs, 
      com.android.internal.R.styleable.AndroidManifestUsesPermission); 

    // Note: don't allow this value to be a reference to a resource 
    // that may change. 
    String name = sa.getNonResourceString(
      com.android.internal.R.styleable.AndroidManifestUsesPermission_name); 
    /* Not supporting optional permissions yet. 
    boolean required = sa.getBoolean(
      com.android.internal.R.styleable.AndroidManifestUsesPermission_required, true); 
    */ 

    sa.recycle(); 

    if (name != null && !pkg.requestedPermissions.contains(name)) { 
     pkg.requestedPermissions.add(name.intern()); 
     pkg.requestedPermissionsRequired.add(Boolean.TRUE); 
    } 

    XmlUtils.skipCurrentTag(parser); 

所以Android是否遇到未知的标签,它会直接跳过相应标签。

所以我认为这个问题是由Flex的建立你的项目进入apk的一些错误造成的。如果您可以将您的项目放到网络上,并且我们可以重现此次崩溃,这将非常有帮助。

+0

我有一个工作正常的android原生应用程序相同的权限设置。我的问题是,所有的Android权限都允许在一个Flex的Android应用程序? – AlexGo 2013-02-20 21:07:00

+0

这是测试代码,它会引发与生产代码相同的错误https://github.com/AlexGoo/testProj – AlexGo 2013-02-21 20:39:30