项目中的换肤工具需要生成纯资源的APK包,给动态换肤用。

之前是先用AAPT生成R.java, 再生成R.class, 再生成dex,再生成apk。很复杂,还依赖JRE。大概长这样:

1
2
3
4
5
6
$ aapt package -f -m -S res\ -I android.jar -M AndroidManifest.xml -F temp\bin\xxx.zip
$ aapt package -f -m -S res\ -I android.jar -M AndroidManifest.xml -J temp\gen\xxx
$ dir /s /b temp\gen\xxx\*.java > temp\src\xxx\sources.txt
$ javac -target 1.8 -bootclasspath android.jar -d temp\gen\xxx @temp\src\xxx\sources.txt
$ dx --dex --output temp\bin\xxx\classes.dex temp\gen\xxx
$ java -cp sdklib.jar com.android.sdklib.build.ApkBuilderMain temp\zip\xxx.apk -v -u -z temp\bin\xxx.zip -f temp\bin\xxx\classes.dex

AAPT2

AAPT2(Android 资源打包工具)是一种构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引,并将资源编译为针对 Android 平台进行过优化的二进制格式。

使用AAPT2则简单很多,且不依赖JRE。大概长这样:

1
2
$ aapt2 compile --dir res\ -o build\res.zip
$ aapt2 link -I android.jar build\res.zip --manifest AndroidManifest.xml -o build\xxx.apk

Reference