3

Flex プロジェクト用の .ane 拡張子を開発しました。ane 拡張機能は android 専用で、基本的には android アクティビティを開始します。問題は、アプリケーションの起動時にクラッシュすることです。私は自分の携帯電話でログを表示することができました.Adobe Airは、フレックスアプリケーション記述子ファイルに追加された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>

これは私の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 で許可されているかどうか教えてもらえますか?

4

2 に答える 2

0

Androidの権限を読み、概念を理解することをお勧めしますhttp://developer.android.com/guide/topics/security/permissions.html

次に、Airアプリ記述子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"/>   


....
于 2013-02-15T13:03:51.760 に答える
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権限がflexandroidアプリケーションで許可されているということです。基本的にはそうです。アプリケーションですべてのAndroid権限を使用できます。それらの一部がシステムレベルのアクセス許可であり、use-permissionタグを宣言してもアクセスできない場合でも。

フレックスを使用するかどうかは関係ありません。出力は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が不明なタグを検出した場合、Androidはそのタグをスキップします。

したがって、この問題は、Flexがプロジェクトをapkにビルドするときのいくつかのエラーが原因であると思います。また、プロジェクトをWebに公開できれば非常に役立ち、このクラッシュを再現できます。

于 2013-02-19T10:31:54.207 に答える