8

APK が生成されると、そのコマンドを実行aapt dump badgingします。次のエラーが表示され続けます。

application: label='Name' icon='res/drawable/icon_128x128.png'
application-debugable launchable-activity: name='co.package.name.MainActivity' label='Name' icon='' 'android: name' 属性: 属性が文字列値ではありません

すべてのアクティビティにラベル名を追加し、/res の下にあるその他すべての values-xxx フォルダーを削除しようとしましたが、無駄でした。ただし、まったく新しいプロジェクトを作成して新しい APK を生成すると、aapt dump badgingコマンドで APK を正常に実行できます。

両方の APK の出力メッセージを比較したところ、主な違いが見つかりました。

成功のメッセージ apk:

application-label:'AppLabel'
application-icon-160:'res/drawable-xhdpi/icon_128x128.png'
application-icon-240:'res/drawable-xhdpi/icon_128x128.png'
application-icon-320:'res/ drawable-xhdpi/icon_128x128.png'
application: label='AppLabel' icon='res/drawable-xhdpi/icon_128x128.png'
application- debuggable launchable
-activity: name='com.demo.testApp.MainActivity' label=''アイコン='

失敗した apk のメッセージ:

application-label:'MyApp'
application-label-ja:'MyApp'
application-label-de:'MyApp'
application-label-he:'MyApp'
application-label-zh:'MyApp'
application-label-fi:' MyApp'
application-label-nl:'MyApp'
..
.. (すべての言語がアタッチされ、最終的にエラーが発生します)
..
application: label='MyApp' icon='res/drawable/icon_128x128.png'
application- debuggable
launchable-activity: name='com.name.myapp.MainActivity' label='MyApp' icon=''
'android:name' 属性の取得エラー: 属性は文字列値ではありません


----- 編集 ------
「言語」の問題とは関係がないことがわかりました。マニフェスト ファイルを変更し、そのような「application-label-XX」が出力されていないことを確認しましたが、エラーは同じです。

以下は私のマニフェストファイルです

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="co.package.name"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <supports-screens android:anyDensity="true" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- Location -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <!-- Camera -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />
    <uses-feature
        android:name="android.hardware.camera.front"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />

    <!-- GCM Necessary -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <permission
        android:name="co.package.name.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="co.package.name.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <!-- Calendar R/W -->
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon_128x128"
        android:label="@string/app_name"
        >
        <!-- GCM meta-data -->
        <meta-data
            android:name="com.arrownock.push.SERVICE_TYPE"
            android:value="GCM" />
        <meta-data
            android:name="com.arrownock.push.gcm.SENDER_ID"
            android:value="@string/gcm_project_id" />
        <meta-data
            android:name="com.arrownock.push.APP_KEY"
            android:value="@string/light_appkey" />

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/fb_id" />

        <activity
            android:name=".Main"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="co.package.name.SplashHP"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.SettingsHP"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name="co.package.name.LocationSelect"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name="co.package.name.SettingOptionAlarm"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.SettingOptionNotify"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.SettingOptionShare"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="settingshare"
                    android:scheme="oauth" />
            </intent-filter>
        </activity>
        <activity
            android:name="co.package.name.HpCalendar"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.SMSList"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.SMSEditor"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.SMSChooseToSend"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.ShareToFB"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.ActPOI"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>

        <activity
            android:name="com.facebook.LoginActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>
        <activity
            android:name="co.package.name.LogInOutFB"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>

        <activity
            android:name="co.package.name.LoginTwitter"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="t4jsample"
                    android:scheme="oauth" />
            </intent-filter>
        </activity>

        <receiver
            android:name="co.package.name.AlarmReceiver"
            android:exported="true" >
            <intent-filter>
                <action android:name="@string/action_alarm" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

        <!-- GCM Service -->
        <receiver
            android:name="com.arrownock.push.AnPushGCMReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>

                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="co.package.name" />
            </intent-filter>
        </receiver>
        <service android:name="com.arrownock.push.GCMIntentService" />

        <receiver
            android:name="co.package.name.ExtendedReceiver"
            android:exported="true"
            android:icon="@drawable/icon_128x128"
            android:label="Receiver" >
            <intent-filter>
                <action android:name="com.arrownock.push.PushService.MSG_ARRIVAL" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

私のマニフェストファイルに間違ったフォーマットやタイプミスがあるのでしょうか?

------ 編集 ----
また、おそらくデコードの問題だと思います。私の環境ではutf-8を使用しています。XML をバイナリ ファイルに変換するビルド プロセスで問題が発生した可能性があります。

上記に不合理な疑いがある場合は、心からお詫び申し上げます。私はこの問題に 3 日間立ち往生しており、実際には進展が見られません。多くのことを試しましたが、エラーは常に同じです。提案やコメントをいただければ幸いです。

4

8 に答える 8

12

これは壊れた aapt ツールによっても引き起こされる可能性があるということですか?

もちろん。aapt dump badgingAndroid ツールには歴史的に多くのバグがありましたが、それが何らかの形で完璧であると仮定する理由はありません。実際、あなたの問題はすでにバグとして報告されています。したがって、ここに関連する可能性のあるアプリの実行にも問題が見られない限りaapt dump badging必ずしもアプリの問題ではなく、それが問題のある項目であると想定します。

R22 ツールにまだ更新していない場合は、更新して、このバグが修正されているかどうか、問題が解決されていないかどうかを確認してください。R22 ツールを使用している場合は、その問題にコメントを追加してこれを指摘し、この SO の質問へのリンクを含めることができます。これにより、ツール チームは問題に関して別のデータ ポイントを得ることができます。

于 2013-06-09T12:34:10.733 に答える
5

Gradle を使用していて、ビルド フレーバーの 1 つに基づいて置換を行いたい場合は、Android の @string 参照を使用する代わりに、カスタムの置換文字列を使用できます。( http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support )

build.gradle ファイルで、「manifestPlaceholders」セクションで各ビルド フレーバーの値を定義します。

productFlavors {
    pro {
        manifestPlaceholders = [
            proFreeString:"my.pro.string"
        ]
    }
    free {
        manifestPlaceholders = [
            proFreeString:"my.free.string"
        ]
    }
}

次に、マニフェスト ファイルで「proFreeString」を代用として使用できます。

        <intent-filter>
            <action android:name="com.foo.${proFreeString}.ACTION_1" />
        </intent-filter>
于 2015-02-14T18:25:00.733 に答える
2

アクション名を確認する

<action android:name="@string/action_restart" />

への変更

<action android:name="kr.mint.test.restart" />
于 2014-03-27T01:30:09.403 に答える
0

基本的にエラーメッセージが示唆するように、これを解決するには、マニフェストファイルのすべての行を調べて、すべての「android:name」に適切にリンクされた「文字列値」があることを確認してください。

マニフェスト ファイルのすべての「android:name」属性に必要な文字列をハードタイプして、問題をデバッグすることをお勧めします。

于 2016-08-22T13:34:06.157 に答える