<center>手工打包APK</center>
1. 设置SDK
环境变量
添加目录到环境变量....
当前环境为4.0的SDK, 1.8额JDK
JAVA SDK目录
%JAVA_HOME%\bin;
Android SDK根目录
%ANDROID%
=Android SDK 的%Path%
sdk工具目录
%ANDROID%\sdk\tools;
%ANDROID%\platform-tools;
%ANDROID%\build-tools\23.0.1;
对应版本号的目录
2. 利用命令行创建Android
工程
命令:
android create project -n Test -t android-14 -p DstPath -k org.test.test -a test
android create project 的参数
命令 | 命令解释 |
---|---|
-n --name |
工程名称 |
-t --target |
项目编译的目标Android 版本,详情见查看安卓版本
|
-p --path |
生成的目标目录 |
-k --package |
指定项目的包名 |
-a --activity |
Activity 名称 |
-g --gradle |
使用Gradle 模版 |
-v --gradle-vers |
Gradle 版本 |
查看安卓版本
可以使用
android.bat list targets
命令查看当前安装的AndRoid
版本,(ID或者名称)
3. 编译资源
利用AAPT
编译资源文件
- 先切换命令行到工程目录,
- 根目录新建一个
gen
目录, - 然后输入命令产生
R.java
文件
aapt package -f -m -J gen -S res -I %Android%\platforms\android-14\android.jar -M AndroidManifest.xml
命令 | 命令解析 |
---|---|
-f |
覆盖现有文件 |
-m |
产生包目录在J 命令所指目录之下 |
-J |
指定R.java 资源文件存放路径 |
-S |
从什么目录找到资源文件,可指定多个文件 |
-I |
指定版本平台的android.jar 的路径 |
-M |
指定完整的AndroidManifest.xml 路径包含到ZIP中 |
-A |
assert文件夹的路径 |
-F |
具体指定apk文件的输出 |
4. 使用javac
编译.java
文件为.class
javac -source 1.6 -target 1.6 -bootclasspath %Android%/platforms/android-14/android.jar -d bin gen/org/test/test/*.java src/org/test/test/*.java
javac
-source 1.6 //什么版本JDK源文件
-target 1.6 //什么版本JDK目标文件
-bootclasspath %Android%/platforms/android-14/android.jar //编译时可能使用的环境
-d bin //输出目录
gen/org/test/test/*.java src/org/test/test/*.java //源目录
命令 | 功能 |
---|---|
-target |
表示编译之后的class文件运行的环境版本 |
-bootclasspath |
表示编译需要用到的系统库 |
-d |
表示编译之后的class文件存放的目录 |
5. 使用dx
生成 .dex
文件
dx
版本dx version 1.11
(23.0.1目录下dx文件
)
dx --dex --output=bin/classes.dex bin\org\test\test
Tips: 转换时出错了, 给
javac
编译版本从1.8转换为1.6之后转换成功
5. 使用aapt
生成资源包文件
根目录新建
assets
文件夹
aapt package -f -A assets -S res -I %Android%/platforms/android-14/android.jar -M AndroidManifest.xml -F bin/test
6.打包一个未签名的APK
解决apkbuilder
不存在的问题
copy android.bat apkbuilder.bat
修改com.android.sdkmanager.Main
成com.android.sdklib.build.ApkBuilderMain
产生未签名的APK
apkbuilder 目标文件路径与文件名.apk -v -u -z 资源包文件路径与文件名 -f dex文件路径与文件名 -rf 源文件路径
路径均为全路径
命令 | 功能 |
---|---|
-z |
资源打包文件 |
-f |
类打包文件 |
-rf |
源代码目录 |
7. 使用keytool
来产生一个keystore
文件
keytool -genkey -alias CR23Test -keyalg RSA -validity 20000 -keystore CR23Test.keystore
命令 | 功能 |
---|---|
-alias KeyName |
表示别名 |
-keyalg RSA |
产生键的加密算法 |
-validity 40000 |
有效期限4000天 |
-keystore |
保存到本地的文件名 |
8. 签名APK
jarsigner -verbose -keystore CR23Test.keystore -signedjar HelloWorld_signed.apk HelloWorld.apk CR23Test
jarsigner -verbose
-keystore keystore文件名
-signedjar 签名后的apk名称 需签名apk名称
keystore中的别名(不是文件名)
注意:上面的keystore中的别名,一定记住不是文件名,如果写文件名就会提示
jarsigner: 找不到 xxx 的证书链。xxx 必须引用包含私有密钥和相应的公共密钥证书链的有效密钥库密钥条目。
9. 安装APK
adb install HelloWorld_signed.apk
10. 卸载APK
adb uninstall org.test.test
填写应用的包名