【问题标题】:android permissions in flex 4.6 mobile projectflex 4.6移动项目中的android权限
【发布时间】:2013-01-29 17:12:34
【问题描述】:

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

权限的一个例子是:

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

这是我的 air-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>

这是我的安卓活动代码:

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

这是我的调用函数:

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

谁能告诉我 flex 是否允许所有来自 android 的权限?

【问题讨论】:

    标签: android apache-flex air flex4 flex4.5


    【解决方案1】:

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

    然后将所需的权限配置添加到您的空中应用描述符 xml。 例如:

    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"/>   
    
    
    ....
    

    【讨论】:

    • 我非常了解 android 权限的概念,但我的问题是当我在 air-app.xml 文件中添加这些权限时,我的应用程序崩溃并且在我的手机日志中显示这些权限不是找到了。
    • 您可以发布您的应用描述符吗?还有一些你的java代码里面的代码?
    【解决方案2】:

    所有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 权限。

    编辑:

    我的问题是 flex 中允许所有 android 权限 安卓应用。 基本上,是的。您可以在应用程序中使用所有 android 权限。即使其中一些是系统级权限,即使您声明了使用权限标签,您也无法访问。

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

    以下是 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 时的一些错误引起的。如果您可以将您的项目放到网络上,这将非常有帮助,我们可以重现此崩溃。

    【讨论】:

    • 我在一个运行良好的 android 本机应用程序中具有相同的权限设置。我的问题是 flex android 应用程序中允许所有 android 权限?
    • 这是测试代码,它抛出与生产代码相同的错误github.com/AlexGoo/testProj
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多