Android APK 编译打包流程

来源:互联网 发布:如何在淘宝外卖开店 编辑:程序博客网 时间:2024/06/03 12:28

下面是Google官方的一个apk编译打包的流程图


一.用AAPT编译R.java文件

AAPT全称是 Android Asset Packaging Tool。
aapt有一个可执行的aapt.exe在Android SDK 的build-tools下,选择要编译的SDK版本,如23.0.1,
在该目录下命令行运行下面指令:

aapt.exe package -f -m -J E:\MyApp\bin     (产物R.java输出的目录)  -S MyApp\app\src\main\res                  (资源文件夹路径)-I D:\Tools\AndroidSDK\platforms\android-23\android.jar    (本地android.jar路径)-M E:\MyApp\app\src\main\AndroidManifest.xml       (项目AndroidManifest.xml)

aapt 参数的含义
-f 如果编译出来的文件已经存在,强制覆盖。
-m 使生成的包的目录放在-J参数指定的目录。
-J 指定生成的R.java的输出目录
-S res文件夹路径
-A assert文件夹的路径
-M AndroidManifest.xml的路径
-I 某个版本平台的android.jar的路径
-F 具体指定apk文件的输出

二.编译AIDL的java文件

AIDL的可执行文件也在Android SDK 的build-tools下,aidl.exe。如果项目没有AIDL文件,可以忽略此步骤。

  aidl.exe -IE:\MyApp\app\src                          (项目路径)  -oE:\MyApp\bin                                       (.java文件输出)  E:\MyApp\app\src\main\aidl\com\mytemplateapp\IMyAidlInterface.aidl   (需要编译的AIDL文件)

三.把java文件编译成class文件

把R.java跟AIDL的 java文件编译出来以后,就可以跟其他java源文件一起编译成class文件了。

javac -encoding UTF-8-bootclasspath D:\Tools\AndroidSDK\platforms\android-23\android.jar-d E:\MyApp\bin                                        (产物输出路径)E:\MyApp\app\src\main\java\com\mytemplateapp\*.java                                              E:\MyApp\bin\com\mytemplateapp\R.javaE:\MyApp\bin\com\mytemplateapp\IMyAidlInterface.java

四.将编译好的class文件打成dex文件

此处选择class文件的路径需要注意,class文件绝对路径在“E:MyAppbin commytemplateapp”,但是在命令行输入时应该输入到“E:MyAppbin ”,这样编译时className才会跟path对应上。(commytemplateapp 是包名)

dx.bat --dex --output=E:\MyApp\bin\classes.dex E:\MyApp\bin

五.生成apk

- 1.资源文件打包,包括生成resources.arsc,以及xml文件的二进制文件,打进test.apk里面。

aapt package -f -M E:\Project\MyTemplateApp\app\src\main\AndroidManifest.xml-I D:\Tools\AndroidSDK\platforms\android-23\android.jar-A E:\MyApp\asserts  -S E:\MyApp\app\src\main\res-F E:\MyApp\bin\test.apk

- 2.往apk里面加入dex文件。 
由于apkbuilder工具已弃用,我们需要调用sdklib.jar 里面的com.android.sdklib.build.ApkBuilderMain类去调用。

java -classpath D:\Tools\AndroidSDK\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain E:\MyApp\bin\test_unsigned.apk       (新的apk)-v -u -z E:\MyApp\bin\test.apk                      (原来的apk)-f E:\MyApp\bin\classes.dex                         (需要加入的dex文件) 

- 3.加入签名。 
用SDK自带的一个debug key进行签名。

jarsigner -verbose -keystore C:\Users\Administrator\.android\debug.keystore-storepass android-keypass androidE:\MyApp\bin\test_unsigned.apkandroiddebugkey

- 3.签名对齐。

zipalign -f 4 ./testbuild/out/test_unsigned.apk ./testbuild/out/test_signed.apk

到此,apk就打包成功了,可以通过ADB安装到手机上了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米3运行慢怎么办 红米手机运行慢怎么办 红米手机忘记解锁图案怎么办 小米手机解锁图案忘了怎么办 红米2内屏坏了怎么办 红米密码忘记了怎么办 红米pro玩王者卡怎么办 红米note4不支持计步怎么办 红米pro玩游戏卡怎么办 红米手机费电快怎么办 荣耀5c忘记密码怎么办 小米之家不退货怎么办 手机号绑定过多小米账户怎么办 耐克黑色鞋褪色怎么办 买广汽传祺7s新车有问题怎么办 华为荣耀10边框掉色了怎么办 网购商家打来无货怎么办 客户拍了不发货怎么办 天猫商家欺骗买家怎么办 阿里买家投诉我发空包怎么办 苹果6s电池坏了怎么办 hm买的单鞋脏了怎么办 微店违规屏蔽搜索怎么办 ios微信支付失效怎么办 京东第三方店铺关闭怎么办 京东店铺关门了怎么办 国美退款不到账怎么办 小米小店通过了怎么办 苹果的发票丢了怎么办 苹果7p开不开机怎么办 申请退款了怎么卖家还发货怎么办 买家申请退款卖家不退款怎么办 卖家恶意不退款怎么办 欠条到期了对方不还钱怎么办 冰箱磕了一坑怎么办 办信用卡没有家庭地址的怎么办 钱付了货没收到怎么办 在苏宁易购上买东西地址错了怎么办 手机分期付款银行卡丢了怎么办 华硕笔记本鼠标不动了怎么办 韵达快递不派送怎么办