手动打包Apk

最近有手动打包apk的需求,因此研究了一下,主要分为以下7步:

1、使用aapt生成R.java文件

2、使用javac编译java源文件成为class文件

3、使用dx将class文件编译为dex文件

4、使用aapt生成resources.ap_资源包文件

5、使用sdklib.jar打包生成未签名apk

6、使用jarsigner签名apk

7、使用zipalign对apk进行4字节对齐

一、使用aapt生成R.java文件:

aapt工具位于sdk目录下的build-tools下(D:\Android\sdk\build-tools\27.0.3)。

aapt package -f //如果编译生成的文件已经存在,强制覆盖
 -M  G:\java_config\AndroidManifest.xml                     // 需要编译的AndroidManifest.xml文件
 -I  D:\Android\sdk\platforms\android-27\android.jar        // 需要用的android.jar,在sdk中可以找到
 -S  G:\java_config\res                                     // 资源所在目录
 -J  G:\java_config\gen                                     // 编译生成R.java文件所在目录
 -m   //使生成的包的目录存放在-J参数指定的目录

二、使用使用javac编译java源文件成为class文件

javac -encoding UTF-8 			// java文件的编码
 -bootclasspath D:\Android\sdk\platforms\android-27\android.jar	// 需要用的android.jar,在sdk中可以找到
 -d  G:\java_config\out 					// 编译成功的class文件路径
  G:\java_config\java\com\example\administrator\mytest\*.java  // 需要编译的java文件,多个的话就一一列出,以空格分割 
  G:\java_config\gen\com\example\administrator\mytest\*.java  // 需要编译的R.java及manifest.java文件
  -classpath   G:\java_config\alipaysdk.jar;G:\java_config\alipaysecsdk.jar   //用到的lib包(需依次列出,并以;号分割),若是没有可以不写这一行
三、使用dx将class文件编译未dex文件

dx.bat工具位于sdk目录下的build-tools下(D:\Android\sdk\build-tools\27.0.3),需设置环境变量

dx --dex --output=G:\java_config\dex\classes.dex  //生成的classes.dex
	G:\res_config\lib\HMS_SDK_2.5.3.302.jar   //需要打包的依赖jar,若多个以空格分割,若是没有,此行可省略
	G:\java_config\out  //需要编译的class文件

四、使用aapt生成resources.ap_资源包文件

aapt package -f   //如果编译生成的文件已经存在,强制覆盖
-M G:\java_config\AndroidManifest.xml // 需要编译的AndroidManifest.xml文件
-S G:\java_config\res   // 资源所在目录
-I D:\Android\sdk\platforms\android-27\android.jar	   // 需要用的android.jar,在sdk中可以找到
-F G:\java_config\dex\resources.ap_  //生成的resources.ap_所在目录
五、使用sdklib.jar打包生成未签名apk

因为sdk更新3.0以后apkbuilder已经被删除了,官方建议使用sdklib.jar打包apk,sdklib.jar位于D:\Android\sdk\tools\lib下

java -cp 
D:\Android\sdk\tools\lib\sdklib-26.0.0-dev.jar  //sdklib.jar位置
com.android.sdklib.build.ApkBuilderMain //使用到的classname,固定不变
G:\result\modify_temp\temp.apk   //输出apk的路径
-v -u    //u指创建未签名的包
-z G:\java_config\dex\resources.ap_   //前面生成的resources.ap_文件
-f G:\java_config\dex\classes.dex   //签名生成的classes.dex文件
-rf G:\java_config\java  //引用的第三方jar以及其中的资源文件,按照一定的格式放置到apk文件夹中,其实就是src目录
-nf G:\java_config\libs   //将主项目libs下面的so库打包
六、使用jarsigner签名apk

上面生成的apk是未签名的,不能正常安装,需要签名,才可以正常安装

jarsigner -verbose 
-keystore C:\Users\Administrator\Desktop\debug.keystore   //签名文件所在目录
-signedjar G:\result\官网_temp.apk    //签名后生成的apk
G:\result\modify_temp\temp.apk 				//需要签名的apk
***** 					//签名文件的别名
-storepass *****				//签名文件的密码
7、使用zipalign对apk进行4字节对齐

zipalign的作用对资源文件通过内存映射对齐到4字节边界,这样访问资源文件的代码才是有效率的,使得在运行时Android与应用程序间的交互更加有效率

zipalign -f 4 
G:\result\官网_temp.apk  //需要4字节对齐的apk
G:\result\官网.apk			//4字节对齐之后生成的apk
至此,手动打包apk已经完成。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值