簡體   English   中英

flex 4.6移動項目中的android權限

[英]android permissions in flex 4.6 mobile project

我為flex項目開發了一個.ane擴展。 ane擴展僅適用於android,基本上它啟動了android活動。 問題是當應用程序啟動它崩潰時。 我設法在我的手機上查看日志,我看到adobe air抱怨在flex應用程序描述符文件中添加的某些android權限未找到(permisions已添加到我的air-app.xml中)。

Permision的例子是:

<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>

這是我的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中有效嗎?

我建議您閱讀Android權限並了解http://developer.android.com/guide/topics/security/permissions.html這一概念

然后向您的air app descriptor 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"/>   


....

可以在Manifest.Permissions中找到所有Android權限。 但是,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權限。 基本上,是的。 您可以在應用程序中使用所有Android權限。 即使您聲明了一個use-permission標記,即使其中一些是您無權訪問的系統級權限。

無論你是否使用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中時的一些錯誤引起的。 如果您可以將項目放在網絡上,我們可以重現這次崩潰,這將非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM