(转)Android 编译,打包、签程名详细教

1.Android程序编译、打包、签名、发布的三种方式:
方式一:命令行手动编译打包 
方式二:使用ant自动编译打包 
方式三:使用eclipse+ADT编译打包 

2.Android编译、打包的步骤:
2.1第一步 生成R.java类文件:
Eclipse中会自动生成R.java,ant和命令行使用android SDK提供的aapt.ext程序生成R.java。 

2.2第二步 将.aidl文件生成.java类文件:
Eclipse中自动生成,ant和命令行使用android SDK提供的aidl.exe生成.java文件。 

2.3第三步 编译.java类文件生成class文件:
Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件。 

2.4第四步 将class文件打包生成classes.dex文件:
Eclipse中自动生成,ant和命令行使用android SDK提供的dx.bat命令行脚本生成classes.dex文件。 

2.5第五步 打包资源文件(包括res、assets、androidmanifest.xml等):
Eclipse中自动生成,ant和命令行使用Android SDK提供的aapt.exe生成资源包文件。 

2.6第六步 生成未签名的apk安装文件:
Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用android SDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件。 

2.7第七步 对未签名的apk进行签名生成签名后的android文件:
Eclipse中使用Android Tools进行签名,ant和命令行使用jdk的jarsigner对未签名的包进行apk签名。

3.命令行手动编译打包详解 
详见:http://jojol-zhou.javaeye.com/blog/729254

4.ant自动打包android程序详解4.1生成R.java类文件:
    
  
    
<target name="resource-src" depends="copy">
   
  
        
  <echo>
   Generating R.java / Manifest.java from the resources...
  </echo> 
  
        
  <exec executable="${aapt}" failonerror="true">
    
   

   <arg value="package" /> 
   

   <arg value="-m" /> 
   

   <arg value="-J" /> 
   

   <arg value="${outdir-gen}" /> 
   

   <arg value="-M" /> 
   

   <arg value="AndroidManifest.xml" /> 
   

   <arg value="-S" /> 
   

   <arg value="${resource-dir}" /> 
   

   <arg value="-I" /> 
   

   <arg value="${android-jar}" /> 
   

  </exec> 
  
    
</target> 

4.2将.aidl文件生成.java类文件:
    
  
    
<target name="aidl" depends="copy">
   
  
        
  <echo>
   Compiling aidl files into Java classes...
  </echo> 
  
        
  <apply executable="${aidl}" failonerror="true">
    
   
            
   <arg value="-p${android-framework}" /> 
   
            
   <arg value="-I${srcdir}" /> 
   
            
   <fileset dir="${srcdir}">
     
    
                
    <include name="**/*.aidl" /> 
    
            
   </fileset> 
   
        
  </apply> 
  

</target> 

4.3编译.java类文件生成class文件:
    
  
    
<target name="compile" depends="copy, resource-src, aidl">
   
  
        
  <javac encoding="GB18030" target="1.5" debug="true" extdirs="">
   
                srcdir="." 
   
                destdir="${outdir-classes}" 
   
                bootclasspath="${android-jar}"> 
   
            
   <classpath>
     
    
                
    <fileset dir="${external-libs}" includes="*.jar" /> 
    
            
   </classpath> 
   
         
  </javac> 
  
    
</target> 
   
4.4第四步 将class文件打包生成classes.dex文件:
    
  
    
<target name="dex" depends="compile">
   
  
        
  <echo>
   Converting compiled files and external libraries into ${outdir}/${dex-file}...
  </echo> 
  
        
  <apply executable="${dx}" failonerror="true" parallel="true">
    
   
            
   <arg value="--dex" /> 
   
            
   <arg value="--output=${intermediate-dex-ospath}" /> 
   
            
   <arg path="${outdir-obfuscate-classes-ospath}" /> 
   
            
   <fileset dir="${external-libs}" includes="*.jar" /> 
   
        
  </apply> 
  
    
</target> 
4.5第五步 打包资源文件(包括res、assets、androidmanifest.xml等):
   
  
    
<target name="package-res-and-assets">
   
  
        
  <echo>
   Packaging resources and assets...
  </echo> 
  
        
  <exec executable="${aapt}" failonerror="true">
    
   
            
   <arg value="package" /> 
   
            
   <arg value="-f" /> 
   
            
   <arg value="-M" /> 
   
            
   <arg value="AndroidManifest.xml" /> 
   
            
   <arg value="-S" /> 
   
            
   <arg value="${resource-dir}" /> 
   
            
   <arg value="-A" /> 
   
            
   <arg value="${asset-dir}" /> 
   
            
   <arg value="-I" /> 
   
            
   <arg value="${android-jar}" /> 
   
            
   <arg value="-F" /> 
   
            
   <arg value="${resources-package}" /> 
   
        
  </exec> 
  
    
</target> 
4.6第六步 生成未签名的apk安装文件:
   
<target name="package" depends="dex, package-res">
   
  
        
  <echo>
   Packaging ${out-unsigned-package} for release...
  </echo> 
  
        
  <exec executable="${apk-builder}" failonerror="true">
    
   
            
   <arg value="${out-unsigned-package-ospath}" /> 
   
            
   <arg value="-u" /> 
   
            
   <arg value="-z" /> 
   
            
   <arg value="${resources-package-ospath}" /> 
   
            
   <arg value="-f" /> 
   
            
   <arg value="${intermediate-dex-ospath}" /> 
   
            
   <arg value="-rf" /> 
   
            
   <arg value="${srcdir-ospath}" /> 
   
            
   <arg value="-rj" /> 
   
            
   <arg value="${external-libs-ospath}" /> 
   
        
  </exec> 
  
        
  <echo>
   It will need to be signed with jarsigner before being published.
  </echo> 
  
    
</target> 
    
4.7第七步 对未签名的apk进行签名生成签名后的android文件:

<target name="jarsigner" depends="package">
   
  

  <echo>
   Packaging ${out-unsigned-package} for release...
  </echo> 
  

  <exec executable="${jarsigner}" failonerror="true">
    
   

   <arg value="-verbose" /> 
   

   <arg value="-storepass" /> 
   

   <arg value="byread002" /> 
   

   <arg value="-keypass" /> 
   

   <arg value="byread002" /> 
   

   <arg value="-keystore" /> 
   

   <arg value="bbyread.keystore" /> 
   

   <arg value="-signedjar" /> 
   

   <arg value="${out-signed-package-ospath}" /> 
   

   <arg value="${out-unsigned-package-ospath}" /> 
   

   <arg value="byread" /> 
   

  </exec> 
  

</target>

原文地址:https://www.cnblogs.com/greywolf/p/3037092.html