zoukankan      html  css  js  c++  java
  • Android 自动编译、打包生成apk文件 2

     from://http://blog.csdn.net/androiddevelop/article/details/11100109

    相关文章列表:

    《Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式》(当前文章)

        上次使用命令行生成apk文件《Android 命令行编译、打包生成apk文件》,学习命令行生成的目的是为了编写ant打下基础。

    一、 ant环境

    下载ant包,配置环境变量

    二、ant编译Android项目

    1. 生成R文件
    2. Java代码生成class文件
    3. class文件生成dex文件
    4. 打包资源
    5. 生成apk
    6. 签名apk
     
     
     
    1. aapt命令, 生成R文件
    [plain] view plaincopyprint?
     
     
    1. > aapt package -f -m -J ./gen -S res -M AndroidManifest.xml -I D:android.jar  

    -f 如果编译生成的文件已经存在,强制覆盖。
    -m 使生成的包的目录存放在-J参数指定的目录
    -J 指定生成的R.java 的输出目录路径
    -S 指定res文件夹的路径
    -I 指定某个版本平台的android.jar文件的路径
    -A 指定assert文件夹的路径
    转换为ant为:
    1. <exec executable="aapt">  
    2.     <arg value="package" />  
    3.     <arg value="-m" />  
    4.     <arg value="-J" />  
    5.     <arg value="gen" />  
    6.     <arg value="-S" />  
    7.     <arg value="res" />  
    8.     <arg value="-M" />  
    9.     <arg value="AndroidManifest.xml" />  
    10.     <arg value="-I" />  
    11.     <arg value="${android-jar}" />  
    12.     <arg value="--auto-add-overlay" /> <!-- 覆盖资源 -->  
    13. </exec>  
     
     
     

    2. javac命令,生成class文件
    [plain] view plaincopyprint?
     
     
    1. > javac -target 1.5 -bootclasspath D:android-sdk-windowsplatformsandroid-8android.jar -d bin srcdemoproject*.java gendemoprojectR.java  

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

    转换为ant为:

    1. <javac  target="1.5" destdir="bin/classes" bootclasspath="${android-jar}">  
    2.     <src path="src" />  
    3.     <src path="gen" />  
    4. </javac>  



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

    [plain] view plaincopyprint?
     
     
    1. > dx --dex --output=D:ProjectDemoinclasses.dex D:ProjectDemoin  

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

     

    转换为ant为:

    1. <exec executable="dx.bat" failonerror="true">   
    2.      <arg value="--dex" />   
    3.      <arg value="--output=${project-dir}inclasses.dex" />   
    4.   <arg path="${project-dir}inclasses" />  
    5. </exec>   



    4. aapt命令,打包资源
    [plain] view plaincopyprint?
     
     
    1. > aapt package -f -M AndroidManifest.xml -S res -I D:android-sdk-windowsplatformsandroid-8android.jar -F bin esources.ap_  

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

    转换为ant为:

    1. <exec executable="aapt">  
    2.      <arg value="package" />  
    3.      <arg value="-f" />  
    4.      <arg value="-M" />  
    5.      <arg value="AndroidManifest.xml" />  
    6.      <arg value="-S" />  
    7.      <arg value="res" />  
    8.      <arg value="-A" />  
    9.      <arg value="assets" />  
    10.      <arg value="-I" />  
    11.      <arg value="${android-jar}" />  
    12.      <arg value="-F" />  
    13.      <arg value="bin esources.ap_" />  
    14.      <arg value="--auto-add-overlay" />  
    15. </exec>  



    5. apkbuilder命令,生成apk
    [plain] view plaincopyprint?
     
     
    1. apkbuilder D:ProjectDemoinprojectdemo.apk -v -u -z D:ProjectDemoin esources.ap_ -f D:ProjectDemoinclasses.dex -rf D:ProjectDemosrc  

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

    转换为ant为:

    1. <exec executable="apkbuilder.bat">  
    2.      <arg value="${project-dir}inunsigned.apk" />  
    3.      <arg value="-u" />  
    4.      <arg value="-z" />  
    5.      <arg value="${project-dir}in esources.ap_" />  
    6.      <arg value="-f" />  
    7.      <arg value="${project-dir}inclasses.dex" />  
    8. </exec>  


    6. 签名

    [plain] view plaincopyprint?
     
     
    1. jarsigner  -verbose -keystore C:UsersUserNameDesktopuild elease.keystore -storepass antPassword -keypass antPassword -signedjar D:ProjectDemoinprojectdemo-signed.apk D:ProjectDemoinprojectdemo.apk release  


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

    转换为ant为:

    1. <exec executable="jarsigner">  
    2.      <arg value="-keystore" />  
    3.      <arg value="${project-dir} elease.keystore" />  
    4.      <arg value="-storepass" />  
    5.      <arg value="antPassword" />  
    6.      <arg value="-keypass" />  
    7.      <arg value="antPassword" />  
    8.      <arg value="-signedjar" />  
    9.      <arg value="${project-dir}insigned.apk" />  
    10.      <arg value="${project-dir}inunsigned.apk" />  
    11.      <arg value="release" />  
    12. </exec>  

    三、完整build.xml文件

      1. <?xml version="1.0" encoding="utf-8"?>  
      2. <project default="main">  
      3.   
      4.      <property name="android-jar" value="D:android-sdk-windowsplatformsandroid-8android.jar" />  
      5.      <property name="project-dir" value="D:ProjectDemo" />  
      6.   
      7.      <target name="init">  
      8.         <echo>start initing ... </echo>  
      9.   
      10.         <mkdir dir="gen" />  
      11.         <delete>  
      12.             <fileset dir="gen"></fileset>  
      13.         </delete>  
      14.           
      15.         <mkdir dir="bin/classes" />  
      16.         <delete>  
      17.             <fileset dir="bin/classes"></fileset>  
      18.         </delete>  
      19.   
      20.         <echo>finish initing. </echo>  
      21.     </target>  
      22.       
      23.     <target name="main" depends="init">  
      24.         <echo>generating R.java for project to dir gen (using aapt) ... </echo>  
      25.           <exec executable="aapt">  
      26.               <arg value="package" />  
      27.               <arg value="-m" />  
      28.               <arg value="-J" />  
      29.               <arg value="gen" />  
      30.               <arg value="-S" />  
      31.               <arg value="res" />  
      32.               <arg value="-M" />  
      33.               <arg value="AndroidManifest.xml" />  
      34.               <arg value="-I" />  
      35.               <arg value="${android-jar}" />  
      36.               <arg value="--auto-add-overlay" /> <!-- 覆盖资源 -->  
      37.           </exec>  
      38.   
      39.           <javac  target="1.5" destdir="bin/classes" bootclasspath="${android-jar}">  
      40.               <src path="src" />  
      41.               <src path="gen" />  
      42.           </javac>  
      43.            
      44.          
      45.            
      46.           <echo>packaging class files (include the third-party jars) to calsses.dex ... </echo>  
      47.           <exec executable="dx.bat" failonerror="true">   
      48.                <arg value="--dex" />   
      49.                <arg value="--output=${project-dir}inclasses.dex" />   
      50.             <arg path="${project-dir}inclasses" />  
      51.           </exec>   
      52.            
      53.            
      54.           <echo>packaging resource (include res, assets, AndroidManifest.xml, etc.) to res.zip ... </echo>  
      55.           <exec executable="aapt">  
      56.                <arg value="package" />  
      57.                <arg value="-f" />  
      58.                <arg value="-M" />  
      59.                <arg value="AndroidManifest.xml" />  
      60.                <arg value="-S" />  
      61.                <arg value="res" />  
      62.                <arg value="-A" />  
      63.                <arg value="assets" />  
      64.                <arg value="-I" />  
      65.                <arg value="${android-jar}" />  
      66.                <arg value="-F" />  
      67.                <arg value="bin esources.ap_" />  
      68.                <arg value="--auto-add-overlay" />  
      69.           </exec>  
      70.            
      71.           <echo>building unsigned.apk ... </echo>  
      72.           <exec executable="apkbuilder.bat">  
      73.                <arg value="${project-dir}inunsigned.apk" />  
      74.                <arg value="-u" />  
      75.                <arg value="-z" />  
      76.                <arg value="${project-dir}in esources.ap_" />  
      77.                <arg value="-f" />  
      78.                <arg value="${project-dir}inclasses.dex" />  
      79.           </exec>  
      80.            
      81.           <echo>signing the unsigned apk to final product apk ... </echo>  
      82.           <exec executable="jarsigner">  
      83.                <arg value="-keystore" />  
      84.                <arg value="${project-dir} elease.keystore" />  
      85.                <arg value="-storepass" />  
      86.                <arg value="antPassword" />  
      87.                <arg value="-keypass" />  
      88.                <arg value="antPassword" />  
      89.                <arg value="-signedjar" />  
      90.                <arg value="${project-dir}insigned.apk" />  
      91.                <arg value="${project-dir}inunsigned.apk" />  
      92.                <arg value="release" />  
      93.           </exec>  
      94.            
      95.     </target>  
      96.      
      97.   
      98.      
      99.     <target name="clean">  
      100.     </target>  
      101. </project>  
  • 相关阅读:
    JavaScript学习总结(一)——ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
    IDEL——maven的搭建
    JDBC——Mysql 5.7绿色版配置安装过程
    JAVA的面向对象编程--------课堂笔记
    Javaweb第九章、jsp引入JSTL
    jsp引入JSTL后实现jsp的解耦
    servret的引入
    网页设计学习笔记小结
    jdk和Tomcat环境变量设置
    SLZ-VMware虚拟机_ORACLE安装监听器
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/3628700.html
Copyright © 2011-2022 走看看