Android自动打包流程详细图:

Android 打包后不能运行 android打包命令_移动开发

 

总结为以下几个步骤:



1. 生成R文件



2. Java代码编译成class文件



3. class文件生成dex文件



4. 打包资源



5. 生成apk



6. 创建密匙



7. 签名apk



 



下面用Ubuntu命令行来打包,流程如下:



1. 生成R文件,命令如下:


$BUILD_SOURCE_PATH/$ANDROID_GEN \
 
  
$BUILD_SOURCE_PATH/$PACKAGE_RESOURCE_FILE \
 
  
$BUILD_SOURCE_PATH/$ANDROID_RESOURCE_DIRECTORY \
 
  
$BUILD_API_LEVEL_JAR \
 
  
$BUILD_SOURCE_PATH/$MANIFEST_FILE


 



-f 如果编译生成的文件已经存在,强制覆盖。
-m 使生成的包的目录存放在-J参数指定的目录
-J 指定生成的R.java 的输出目录路径
-S 指定res文件夹的路径



-I 指定某个版本平台的android.jar文件的路径



-A 指定assert文件夹的路径



 



2.将Java代码编译成class文件,命令行如下:


\
 
  
\
 
  
$BUILD_API_LEVEL_JAR \
 
  
$BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_BIN_CLASSES \
 
  
$BUILD_SOURCE_PATH/$ANDROID_GEN/com/clarck/httpclientnew/R.java \
 
  
$BUILD_SOURCE_PATH/src/com/clarck/httpclientnew/*.java

 



-encoding <编码>        指定编码格式
   
-target <版本>               生成特定 VM 版本的类文件
-bootclasspath <路径>        覆盖引导类文件的位置
-d <目录>                    指定存放生成的类文件的位置
-sourcepath <路径>           指定查找输入源文件的位置



 



3. class文件生成dex文件,命令行如下:



=$BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_CLASSES_DEX \
 
   
$BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_BIN_CLASSES
 
      
--output=<要生成的classes.dex路径> <要处理的class文件的路径>


 



4. 打包资源,命令行如下:



$BUILD_SOURCE_PATH/$MANIFEST_FILE \
 
    
$BUILD_SOURCE_PATH/$ANDROID_RESOURCE_DIRECTORY \
     
$BUILD_SOURCE_PATH/$PACKAGE_RESOURCE_FILE \
     
$BUILD_API_LEVEL_JAR \
     
$BUILD_SOURCE_PATH/$ANDROID_BIN/byreadreader



 



-f 如果编译生成的文件已经存在,强制覆盖
-M 指定AndroidManifest.xml的路径
-S 指定res文件夹路径



-I 指定某个版本平台的android.jar的路径



-F 指定输出文件完整路径



 



5. 生成apk,命令行如下:



$BUILD_APK_PATH/$BUILD_APK_NAME \
   
$BUILD_SOURCE_PATH/$ANDROID_BIN/byreadreader \
 
  
$BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_CLASSES_DEX \
   
$BUILD_SOURCE_PATH/$ANDROID_SRC


 



-v Verbose 显示过程信息
-u 创建一个无签名的包
-z 指定apk资源路径
-f 指定dex文件路径



-rf 指定源码路径



 



6. 创建密匙,命令行如下:



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



 



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



 



7. 签名apk,命令行如下:



$%^ -keypass !@#$%^ -signedjar $BUILD_APK_PATH/$BUILD_RELEASE_APK_NAME $BUILD_APK_PATH/$BUILD_APK_NAME release

 

-verbose  签名/验证时输出详细信息
-keystore 密钥库位置
-storepass          用于密钥库完整性的口令
-keypass            专用密钥的口令(如果不同)
-signedjar          已签名的 JAR 文件的名称 (第一个apk是签名之后的文件, 第二个apk是需要签名的文件)


注:关于混淆代码,只需要在project.properties中指定用來混淆的.pro文件即可。


以上命令可以综合使用一个shell脚本来执行,具体demo详见: https:///clarck/CommandAutoBuild