1、安装JDK
jdk 设置为环境变量以便使用 javac 编译 Java 文件,使用 keytool 命令创建签名文件。
2、安装SDK tools
aapt安装目录:/opt/android-sdk/build-tools/26.0.1/./aapt
android.jar安装目录:/opt/android-sdk/platforms/android-19/android.jar
dx安装目录:/opt/android-sdk/build-tools/26.0.1/./dx
3、编写需要打包的代码
创建 HelloAndroid 文件夹,在文件夹下准备对应的代码。
src/com/example/helloandroid\
obj\
bin\
res/layout\
res/values\
res/drawable\
如果包含 jar 文件,需要增加。
libs
Activity:src/com/example/helloandroid/MainActivity.java
strings.xml
activity_main.xml
AndroidManifest.xml
3、为代码生成R文件
aapt package -f -m -J /src -M $PROJ/AndroidManifest.xml -S /res -I /opt/android-sdk/platforms/android-19/android.jar
-m 指示 aapt 在 -J 指定的位置下创建目录
-J 指定输出的位置。 -J /src 将创建一个 src/com/example/helloandroid/R.java 这样的文件
-S 指定drawables, layouts等的 res 目录在哪里
-I 告诉 aapt android.jar 在哪里
4、编译Java代码
javac -d obj -classpath src -bootclasspath /opt/android-sdk/platforms/android-19/android.jar src/com/example/helloandroid/*.java
如果使用了三方库,需要编译 lib :
javac -d obj -classpath "src:libs/<your-lib>.jar" -bootclasspath /opt/android-sdk/platforms/android-19/android.jar src/com/example/helloandroid/*.java
编译后的 .class 文件在 obj 文件夹中,但 Android 无法读取它们。 我们必须将它们翻译到一个名为“classes.dex”的文件中,该文件将由 dalvik Android 运行时读取:
cd /opt/android-sdk/build-tools/26.0.1/\
./dx --dex --output=/bin/classes.dex /obj
如果使用了三方库,需要编译 lib :
./dx --dex --output=/bin/classes.dex /*.jar /obj
生成所有需要的的材料之后,将它们打包进 apk 中:
./aapt package -f -m -F /bin/hello.unaligned.apk -M /AndroidManifest.xml -S /res -I /opt/android-sdk/platforms/android-19/android.jar\
cp /bin/classes.dex .\
./aapt add /bin/hello.unaligned.apk classes.dex
到目前为止,我们使用了三个 AAPT 命令,第一个和第二个类似,但它们的作用不同。 必须像上面一样复制项目根目录下的 classes.dex 文件! 否则,AAPT 不会将此文件放在 APK 存档中的正确位置(因为 APK 类似于 .zip 文件)。
生成的包无法被 Android 安装,因为它是未对齐和未签名的。
我们可以查看打包成的apk的内容:
./aapt list /bin/hello.unaligned.apk
对APK签名
我们首先使用 Java 给出的命令 keytool 创建一个新的密钥库:
keytool -genkeypair -validity 365 -keystore mykey.keystore -keyalg RSA -keysize 2048
给 APK 签名:
./apksigner sign --ks mykey.keystore /bin/hello.apk
对齐包
./zipalign -f 4 /bin/hello.unaligned.apk $PROJ/bin/hello.apk
对齐可提高应用程序的性能并可能减少内存使用。
翻译
本文翻译自:medium.com/@dexter_422…