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

时间:2022-09-02 18:40:25

第一步 抽取资源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的内容如下

Windows环境手动DOS命令构建apk文件Windows环境手动DOS命令构建apk文件
@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文件

 

以上.