注:これを投稿しないでください"Android.enableAapt2 = false"回答として。 notソリューションです。実行時に問題を引き起こさない実際のエラーを無視するだけです。
解決策は単純で、誤って配置されたものを削除しただけですaction tagマニフェストファイルのインテントフィルターの外側。
Android Studio 2.3で正常にビルドされたアプリケーションがあります。 Android Studio 3.0 Stableを更新した後、このエラーが発生し始め、プロジェクトをビルドできなくなりました。
ここに私のmanifest.xml
<application
Android:name=".ApplicationClass"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:largeHeap="true"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<!--other unrelated stuff-->
<action Android:name="com.google.Android.c2dm.intent.REGISTRATION" />
<receiver
Android:name="com.google.Android.gms.gcm.GcmReceiver"
Android:exported="true"
Android:permission="com.google.Android.c2dm.permission.SEND">
<intent-filter>
<action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
<category Android:name="com.xxx.xxx" />
</intent-filter>
</receiver>
</application>
エラーはこの行を示します:
<action Android:name="com.google.Android.c2dm.intent.REGISTRATION" />
このアクションタグ行をコメント/削除すると、プロジェクトは正常にビルドされますが、GCM
に必要であり、削除できません。
ログを見ると、エラーメインで発生しないマニフェストファイル、/ build/intermediates/manifests/full/debug/AndroidManifest.xmlで発生する
クリーニング、再構築、インスタントランの無効化を試みました。解決策はありますか?
エラーログ:
/THE_PROJECT_PATH/app/build/intermediates/manifests/full/debug/AndroidManifest.xml
Error:(99) error: unknown element <action> found.
Error:(99) unknown element <action> found.
Error:Java.util.concurrent.ExecutionException: Java.util.concurrent.ExecutionException: com.Android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Java.util.concurrent.ExecutionException: com.Android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:com.Android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':app:processDebugResources'.
> Failed to execute aapt
Information:BUILD FAILED in 1s
Information:6 errors
Information:0 warnings
Information:See complete output in console
タグの位置が間違っています。新しいAAPT(AAPT2)は、これに対してエラーをスローするようになりました。
ここのドキュメントから: https://developer.Android.com/studio/build/gradle-plugin-3-0-0-migration.html
AAPT2を使用すると動作が変わる
増分リソース処理を改善するために、Android plugin 3.0.0はデフォルトでAAPT2を有効にします。 AAPT2は古いプロジェクトですぐに動作するはずですが、このセクションでは注意すべきいくつかの動作の変更について説明します。
Androidマニフェストの要素階層
AAPTの以前のバージョンでは、Androidマニフェストの誤ったノードにネストされた要素は無視されるか、警告になります。たとえば、次のサンプルを検討してください。
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="com.example.myname.myapplication"> <application ... <activity Android:name=".MainActivity"> <intent-filter> <action Android:name="Android.intent.action.MAIN" /> <category Android:name="Android.intent.category.LAUNCHER" /> </intent-filter> <action Android:name="Android.intent.action.CUSTOM" /> </activity> </application> </manifest>
AAPTの以前のバージョンは、誤って配置されたタグを単に無視していました。ただし、AAPT2では、次のエラーが表示されます。
AndroidManifest.xml:15: error: unknown element <action> found.
この問題を解決するには、マニフェスト要素が正しくネストされていることを確認してください。詳細については、「 マニフェストファイル構造 」を参照してください。
rootプロジェクトのgradle.propertiesにこのコードを追加します。
Android.enableAapt2=false
これは私のために働いた
root
|
|--gradle.properties
マニフェストファイル構造 に従って、以下のようにアクションコンテンツをintent-filterに入れます。
<intent-filter>
<action Android:name="com.google.Android.c2dm.intent.REGISTRATION" />
</intent-filter>
要約して簡素化するために、メインのAndroidManifest.xmlファイルに集中し、 https://developer.Android.com/ guide/topics/manifest/manifest-intro.html 。それ以外の場合、IDEはデバッグレベルのAndroidManifest.xmlを開き、プロジェクトをクリーン/ビルドして混乱させるたびに多くのエラーを表示します。
この問題の解決策があります。解決策は、コードを<Application <service>>
の外部に記述すると、常に<Application>
の子フォームの下になり、問題が発生することです。サービスは、マニフェストのアプリケーションの子部分です...わかりました...確実に機能します。
マニフェストファイルの名前をAndroidManifest.xmloldのように変更してから、新しいXMLファイルを作成し、AndoridManifest.xmlという名前を付けます。次に、タグ付きの行を削除した後、古いファイルの内容をコピーします。 [ビルド]> [プロジェクトのクリーン]を選択し、[実行]> [アプリのデバッグ]を再度実行します。その後、問題は消えます。
私は最近gradle.propertiesでこの修正を行いましたが、「オプション 'Android.enableAapt2'は非推奨です...」という警告が表示され続け、解決策は代わりにtrueに変更することでした。