java命令 apk,纯命令行打APK实操全记录

生成R.java文件

aapt p -m -J ./gen -M AndroidManifest.xml -S res -I D:/AS_SDK/android-sdk-windows/platforms/android-21/android.jar

Options:

-f 如果编译出来的文件已经存在,强制覆盖。

-m 使生成的包的目录放在-J参数指定的目录。

-J 指定生成的R.java的输出目录

-S res文件夹路径

-A assert文件夹的路径

-M AndroidManifest.xml的路径

-I 某个版本平台的android.jar的路径

-F 具体指定apk文件的输出

编译所有的java文件为Java虚拟机认识的.class文件

使用JDK提供的javac命令进行编译

javac src/com/thc/apkbuild/*.java gen/com/thc/apkbuild/R.java -bootclasspath d:/AS_SDK/android-sdk-windows/platforms/android-21/android.jar -d bin

//命令解释如下:

javac

//包下的java文件

src/com/thc/apkbuild/*.java

//gen目录下的R.java文件

gen/com/thc/apkbuild/*.java

//引用android.jar 这个jar包,如果使用其他的jar包,在后面进行添加即可

-bootclasspath d:/AS_SDK/android-sdk-windows/platforms/android-21/android.jar

//打出来的class文件所在目录

-d bin

//编码格式

-encoding GBK

//添加jar包

-classpath /.../xxx.jar

//例如引用Gson的jar包

javac src/com/thc/apkbuild/*.java gen/com/thc/apkbuild/R.java -d bin -bootclasspath d:/AS_SDK/android-sdk-windows/platforms/android-21/android.jar -classpath libs/gson-2.2.jar

遇到的问题备注: 将java文件编译成class文件的时候一定要记得一起编译gen目录下的R.java文件,否则会报找不到R.java的错误

打包class文件和第三方jar包为dex文件

dx --dex --output=bin\classes.dex bin

命令释义:

output=

bin

编译资源文件生成resources文件

aapt package -f -M AndroidManifest.xml -S res -A assets -I d:/AS_SDK/android-sdk-windows/platforms/android-21/android.jar -F bin/resources

将编译后的资源和其他的资源(assets和res资源)打包为资源压缩包

使用aapt工具,命令如下:

aapt package -f -M AndroidManifest.xml -I d:/AS_SDK/android-sdk-windows/platforms/android-21/android.jar -S res -F my.apk

参数释义在生成R文件的时候有说明。

到这一步就在你当前目录生成了一个my.apk文件

将classes.dex和resources加入到生成的apk中

java -claspath D:\AS_SDK\android-sdk-windows\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain my.apk -v -u -z bin\resources -f bin\classes.dex -rf src

问题说明: 以前可以直接使用apkbuilder工具直接打包,但是目前sdk将该工具移除了。其实apkbuilder最终调用的是sdklib.jar中的com.android.sdklib.build.ApkBuilderMain类来做事情的,所以这里直接通过 java 来使用ApkBuilderMain这个类,来把resources和classes.dex加入到apk文件中

生成有签名的APK

生成签名:

keytool -genkey -alias -keyalg RSA -validity 20000 -keystore

给apk签名

jarsigner -verbose -keystore -signedjar

注意: 在给apk签名的时候的命令是-signedjar

进行zipAlign优化

zipalign -f 4 my_signed.apk my_signed_optimizated.apk

安装到手机

adb install -r my_signed_optimizated.apk