aapt p
を使用してリソースをパッケージ化し、R.Java
を生成しました。
しかし、Android 24にアップグレードしたとき、aapt2.exe
が見つかりました。
aapt2.exe
を使用する必要がありますか?どうやって使うの?私はそれに関するドキュメントを見つけることができませんでした。
AAPTとAAPT2の動作には大きな違いがあります。
AAPT2の背後にある主なアイデアは、新機能を除いて、「パッケージ」ステップを「コンパイル」と「リンク」の2つに分割することです。 1つのファイルのみが変更された場合、その1つのファイルを再コンパイルし、すべての中間ファイルを「link」コマンドでリンクするだけで済むため、パフォーマンスが向上します。
AAPT2は、ほとんどのバグをできるだけ早くキャッチしようとします。そのため、AAPTからAAPT2に切り替えると、一部の要素が正しくネストされていないか、一部の参照が正しくないことを示す多くのエラーが発生する場合があります。新しい制限の詳細については、 Android Studio 3.0ドキュメント をご覧ください。
Android Studio 3.0には、デフォルトでAAPT2が有効になっています(Android Gradle Plugin 3.0.0))。ただし、独自のスクリプトでAAPT2を使用する場合は、処理方法を変更する必要がありますリソース:AAPTを使用した「パッケージ」コマンドの場合、-Sを使用してリソースディレクトリを渡します。AAPT2を使用する場合は、最初に「compileコマンドを使用して各リソースをコンパイルし、次に-Rフラグを付けてすべてのコンパイル済みファイルを渡します」.
例えば:
aapt package -S app/src/main/res/ ...
代わりに使用します:
aapt2 compile -o compiled/res/ app/src/main/res/values/values.xml
aapt2 compile -o compiled/res/ app/src/main/res/drawable/myImage.png --no-crunch
...
aapt2 link -R compiled/res/values_values.arsc.flat -R compiled/res/drawable_myImage.flat ...
フラグの使用にはさらに違いがあります。たとえば、「-pseudo-localize」フラグと「--no-crunch」フラグの両方が、「コンパイル」ステップ中にファイルごとに使用されます。 AAPT2フラグの詳細については、次を入力してください。
aapt2 compile -h
aapt2 link -h
注:これをイザベラの答えへの追加として扱います
これは(2018年2月現在)文書化されていません。 Android Oは最近彼らの作品を発表し、AAPT2について話します スライドで (コンテキストについてはスライド12-14を参照)のOverlay Manager Serviceの作成者。
また、疑問がある場合は、ソースコードを参照してください: https://Android.googlesource.com/platform/frameworks/base/+/Android-7.0.0_r7/tools/aapt2 。