Windows环境手动DOS命令构建apk文件

时间:2022-06-01 18:17:16

第一步 抽取资源id,生成R.java

aapt p[ackage] -f [-A <assets>] -S <res> -M <AndroidManifest.xml> -J <package> -I <android.jar>

参数-JPF决定aapt的输出: -J 输出R.java -P 输出公共资源索引public.xml -F 输出无字节码文件的apk

eg:

D:\Personal\Documents\GitHub\Login\src>aapt p -f -M .\AndroidManifest.xml -S .\res -J .\src\cn\login -I E:\Android\android-sdk\platforms\android-15\android.jar

第二步 生成.class,尽量指定javac版本

javac -target 6 -source 6 *.java

凡是有java源码的目录都要执行一下,包括R.java(尽量把R.java放到包对应的目录下)

eg:

D:\Personal\Documents\GitHub\Login\src\src\cn\login>javac -target 6 -source 6 *.java

第三步 生成.dex,需要使用dx.jar,可将其加入环境变量classpath中,不建议使用dx.bat脚本

java com.android.dx.command.Main --dex --output=<classes.dex> <dir> <!--将dir及其子目录下所有class文件打包为dex字节码文件-->

eg:

D:\Personal\Documents\GitHub\Login\src\src>java com.android.dx.command.Main --dex --output=..\bin\classes.dex .

经过以上步骤,得到classes.dex文件,这是最终版本,会被打包进入apk.

第四步 整合资源(AndroidManifest.xml及res目录下相关xml资源被加密,values目录下的索引资源被加密打包为resources.arsc)

aapt p[ackage] -f -M <AndroidManifest.xml> -S <res> -F <init.apk> -I <android.jar>

eg:

D:\Personal\Documents\GitHub\Login\src>aapt package -f -M .\AndroidManifest.xml -S .\res -F .\bin\init.apk -I E:\Android\android-sdk\platforms\android-15\android.jar

得到init.apk,这是一个仅缺少classesl.dex和签名的apk

第五步 添加classes.dex,这是一个简单的zip任务,命令apkbuilder使用到sdklib.jar的类com.android.sdklib.build.ApkBuilderMain.

java com.android.sdklib.build.ApkBuilderMain <out.apk> -v -u -z <init.apk> -f <classes.dex>

eg:

D:\Personal\Documents\GitHub\Login\src>java com.android.sdklib.build.ApkBuilderMain .\bin\out.apk -v -u -z .\bin\init.apk -f .\bin\classes.dex

第六步 签名,使用jdk工具jartool和jarsigner.

生成签名文件:

keytool -genkey -alias <user> -keyalg RSA -validity 36500 -keystore <android.keystore> <!--alias指定别名,是用户的标识-->

eg:

keytool -genkey -alias develon -keyalg RSA -validity 36500 -keystore .\bin\android.keystore

--此时会提示输入一些必要信息,确认时输入Y即可

签名:

jarsigner -verbose -keystore <android.keystore> -signedjar <signed.apk> <out.apk> <user>

eg:

D:\Personal\Documents\GitHub\Login\src>jarsigner -verbose -keystore .\bin\android.keystore -signedjar .\bin\signed.apk .\bin\out.apk develon

--此时需要输入密钥库口令和用户口令

现在,apk已经可以安装使用了

例子中的项目结构如下

D:\Personal\Documents\GitHub\Login\src
bin
-init.apk
-classes.dex
-out.apk
-android.keystore
-signed.apk
src
|--cn
|--login
-R.java
-LoginAct.java
-*.class
res
|--drawable
-ic_launcher.png
|--layout
-login_view.xml
|--values
-strings.xml
AndroidManifest.xml
build.bat

现在我们完全可以写一个批处理程序,来一步生成我们的apk文件,需要注意的是不要把各种目录混淆了.

build.bat的内容如下

@echo off %关闭回显%
D:
cd %~dp0 %进入项目根目录% %定义android.jar路径%
set ajar=E:\Android\android-sdk\platforms\android-15\android.jar %定义项目包名%
set pkg=cn\login echo 生成R.java文件
aapt p -M .\AndroidManifest.xml -A .\assets -S .\res -J .\src\%pkg% -I %ajar%
pause echo 生成JVM字节码文件
javac -target 6 -source 6 .\src\cn\login\*.java
pause echo 生成DalvikVM字节码文件并归档为classes.dex-^>需手动创建bin目录
java com.android.dx.command.Main --dex --output=.\bin\classes.dex .\src
pause echo 生成init.apk 不含字节码 未签名 不能安装
aapt p -f -M .\AndroidManifest.xml -A .\assets -S .\res -F .\bin\init.apk -I %ajar%
pause echo 添加字节码classes.dex-^>需将sdklib.jar添加到环境变量classpath中
java com.android.sdklib.build.ApkBuilderMain %cd%\bin\out.apk -v -d -u -z %cd%\bin\init.apk -f %cd% \bin\classes.dex
pause echo 签名out.apk-^>bin\signed.apk %签名密钥库android.keystore放到bin下%
jarsigner -verbose -keystore .\bin\android.keystore -signedjar .\bin\signed.apk .\bin\out.apk **
pause echo 任务完成
pause

点击+打开代码

效果大概就是这个样子

Windows环境手动DOS命令构建apk文件

以上.