0.输出文件目录结构

output_file_dir.png

1. aapt命令, 生成R文件

E:\environment\adt\sdk\build-tools\android-4.4W\aapt package -f -m -J F:\workspace\Android\PackageDemo\out\R -S F:\workspace\Android\PackageDemo\res -M F:\workspace\Android\PackageDemo\AndroidManifest.xml -I E:\environment\adt\sdk\platforms\android-20\android.jar

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

如果引用第三方jar,导致编译R.java文件错误,在命令行末尾加上-I %THIRD_JAR%

E:\environment\adt\sdk\build-tools\android-4.4W\aapt package -f -m -J F:\workspace\Android\PackageDemo\out\R -S F:\workspace\Android\PackageDemo\res -M F:\workspace\Android\PackageDemo\AndroidManifest.xml -I E:\environment\adt\sdk\platforms\android-20\android.jar -I F:\workspace\Android\libs\splog.jar

%THIRD_JAR%=F:\workspace\Android\libs\splog.jar

2. javac命令,生成class文件

javac -target 1.7 -source 1.7 -bootclasspath E:\environment\adt\sdk\platforms\android-20\android.jar -d F:\workspace\Android\PackageDemo\out\class F:\workspace\Android\PackageDemo\src\com\example\packagedemo\log\*.java F:\workspace\Android\PackageDemo\src\com\example\packagedemo\*.java F:\workspace\Android\PackageDemo\out\R\com\example\packagedemo\R.java

-target <版本> 生成特定 VM 版本的类文件
-bootclasspath <路径> 覆盖引导类文件的位置
-d <目录> 指定存放生成的类文件的位置,生成package的目录结构
-sourcepath <路径> 指定查找输入源文件的位置
因为Android目前不支持jdk1.8,所以如果使用的jdk的版本大于1.7,编译Java文件时要加入:-target 1.7 -source 1.7

依赖其他jar包编译,使用-cp命令:

javac -target 1.7 -source 1.7 -bootclasspath E:\environment\adt\sdk\platforms\android-20\android.jar -cp F:\workspace\Android\splog.jar -d F:\workspace\Android\PackageDemo\out\class F:\workspace\Android\PackageDemo\src\com\example\packagedemo\*.java F:\workspace\Android\PackageDemo\out\R\com\example\packagedemo\R.java

或者在末尾加上-classpath %THIRD_JAR%

javac -target 1.7 -source 1.7 -bootclasspath E:\environment\adt\sdk\platforms\android-20\android.jar -d F:\workspace\Android\PackageDemo\out\class  F:\workspace\Android\PackageDemo\src\com\example\packagedemo\*.java F:\workspace\Android\PackageDemo\out\R\com\example\packagedemo\R.java -classpath F:\workspace\Android\libs\splog.jar

3. dx 命令,把class文件转换为.dex文件

E:\environment\adt\sdk\build-tools\android-4.4W\dx --dex --output=E:\workspace\EclipseAndroid\test_pkg_out\classes.dex E:\workspace\EclipseAndroid\test_pkg_out\classes

--output=<要生成的classes.dex路径> <要处理的class文件的路径>

依赖包,在末尾加上jar包目录:

E:\environment\adt\sdk\build-tools\android-4.4W\dx --dex --output=F:\workspace\Android\PackageDemo\out\dex\classes.dex F:\workspace\Android\PackageDemo\out\class F:\workspace\Android\libs

4. aapt命令,打包资源

E:\environment\adt\sdk\build-tools\android-4.4W\aapt package -f -M F:\workspace\Android\PackageDemo\AndroidManifest.xml -S F:\workspace\Android\PackageDemo\res -I E:\environment\adt\sdk\platforms\android-20\android.jar -F F:\workspace\Android\PackageDemo\out\res\resources.ap_

-f 如果编译生成的文件已经存在,强制覆盖
-M 指定AndroidManifest.xml的路径
-S 指定res文件夹路径
-A assets
-I 指定某个版本平台的android.jar的路径
-F 指定输出文件完整路径

5. apkbuilder命令,生成apk

java -cp E:\environment\adt\sdk\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain F:\workspace\Android\PackageDemo\out\apk\Demo.apk -v -u -z F:\workspace\Android\PackageDemo\out\res\resources.ap_ -f F:\workspace\Android\PackageDemo\out\dex\classes.dex -rf F:\workspace\Android\PackageDemo\src

-v Verbose 显示过程信息
-u 创建一个无签名的包
-z 指定apk资源路径
-f 指定dex文件路径
-rf 指定源码路径
-nf 指定so文件位置,根目录,armeabi上一级目录
在Android的后期版本中,取消了apkbuilder命令行工具,要自己调用class:java -cp E:\environment\adt\sdk\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain

添加so后打包:

java -cp E:\environment\adt\sdk\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain F:\workspace\Android\PackageDemo\out\apk\Demo.apk -v -u -z F:\workspace\Android\PackageDemo\out\res\resources.ap_ -f F:\workspace\Android\PackageDemo\out\dex\classes.dex -rf F:\workspace\Android\PackageDemo\src -nf F:\workspace\Android\PackageDemo\out
  • 如果需要将so文件打包进apk,一定要加上-nf参数

  • 如果第三方jar包里含有图片资源,一定要加上-rj参数,不然jar包里资源文件解不出来,程序会因为无法引用资源而报错!

6. 创建密钥

keytool -genkey -alias release -keyalg RSA -validity 20000 -keystore release.keystore

-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias 产生别名
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)

7. 签名

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -tsa http://timestamp.digicert.com -keystore F:\workspace\Android\release.keystore -storepass android -keypass android -signedjar F:\workspace\Android\PackageDemo\out\apk\sDemo.apk F:\workspace\Android\PackageDemo\out\apk\Demo.apk release

-verbose 签名/验证时输出详细信息
-keystore 密钥库位置
-storepass 用于密钥库完整性的口令
-keypass 专用密钥的口令(与storepass相同)
-signedjar 已签名的 JAR 文件的名称 (第一个apk是签名之后的文件, 第二个apk是需要签名的文件,第三个是秘钥的别名)
-sigalg,-digestalg 加密算法,jdk 1.8 必须添加,与jdk1.6不同
-tsa 如果不加会报警告


参考:
Android 自动编译、打包生成apk文件 1 - 命令行方式

Android 命令行手动编译打包详解

更多相关文章

  1. Android应用程序安装过程源代码分析(3)
  2. 网络时间同步
  3. SafetyNet & 漏洞rootutils 利用
  4. android studio 常见问题
  5. 关于标准android中视频播放器中的快进和快退的步长时间设置
  6. android面试与总结
  7. Linux系统Android(安卓)SDK 下载版本,报错Warning: File /root/.a
  8. Android逆向分析常用网站
  9. Android(安卓)Studio基础之项目目录结构(四)-学习篇

随机推荐

  1. android 切换activity动画
  2. Android 代码实现的动画
  3. eclipse 项目导入 android studio的方式
  4. Android 通过HTTP POST 上传图片文件
  5. Android Room 数据库
  6. android抓log方法
  7. Android ToastUtils,吐司工具类
  8. 布局概述之帧布局FrameLayout和布局概述
  9. Android 中 上下文Context理解
  10. Android 获取手机本地IP