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

转载 2012年03月28日 18:32:42

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>

Android多渠道批量打包

如若感觉排版不舒服,请移步Android多渠道批量打包 1、为什么要进行多渠道打包?   安卓应用商店(一个商店也叫做一个渠道,如豌豆荚,360手机助手,应用宝)众多,大大小小几百个,每当我们发新...
  • u012532559
  • u012532559
  • 2017年03月02日 22:54
  • 1885

Xcode7企业版打包

今天,boss过来让把App我打个包,说要给他朋友测试一下。由于不知道boss朋友手机的UDID,只有用企业账号打个包了。好了,说下具体实现过程。 首的Product--Archive; ...
  • Mackerelz
  • Mackerelz
  • 2015年10月22日 09:28
  • 1433

Gradle编译打包小结

以前用Eclipse打包,比较笨,右键导出签名 现在一直是用的Android Studio来开发 用Gradle编译打包非常方便 笔者整理的平时编译打包的配置,记录一下,避免遗忘 1.自动签名...
  • byhook
  • byhook
  • 2016年07月12日 20:58
  • 3368

android Gradle打包修改生成的apk文件名称

直接上代码: import java.text.SimpleDateFormat apply plugin: 'com.android.application' android { ...
  • u012390044
  • u012390044
  • 2016年02月26日 11:08
  • 2362

用apktool工具反编译apk后怎么得到源码,重新打包,签名

一、工具准备:apktool , dex2jar , jd-gui 二、使用dex2jar + jd-gui 得到apk的java源码  1.用解压工具从 apk包中取出 classes.dex ...
  • qq_34082638
  • qq_34082638
  • 2017年03月16日 14:42
  • 663

Android应用资源编译打包原理

原文: http://blog.csdn.net/beyond702/article/details/49228115Android查找资源的流程 Android系统中,每一个应用程序一般都会配置很...
  • qq_32115439
  • qq_32115439
  • 2017年02月15日 03:30
  • 261

Delphi XE7编译安卓程序出错了

昨天编译一个先前可以正常运行的程序,忽然就不能编译了,总是提示这个错误,经过一番排查,终于搞定了,原因:删除了安卓lib引用的JAR和单元文件。如果你也出现这个问题,打开工程全部目录,看一下是否有打小...
  • sunylat
  • sunylat
  • 2014年11月29日 15:37
  • 2198

android 源码的m、mm、mmm编译命令的使用与重新打包android系统镜像文件。

m:编译整个安卓系统      makes from the top of the tree mm:编译当前目录下的模块,当前目录下需要有Android.mk这个makefile文件,否则就往上找...
  • qq_32014215
  • qq_32014215
  • 2017年04月21日 10:26
  • 647

Android应用程序资源文件的编译和打包原理

Android查找资源的流程 在Android系统中,每一个应用程序一般都会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等等。这些资源是在应用程序运行时自动根...
  • beyond702
  • beyond702
  • 2015年10月18日 15:49
  • 4520

AndroidStudio打包编译内存溢出的处理

虽然时代还是不断的进步,但是还是会遇到旧时代的东西 比如:AndroidStudio   往往8G的运行内存是不够完好的编译,打包APK。 如果造成内存溢出的情况的时候:我用了以下几种方式来解决了我电...
  • qq_24897723
  • qq_24897723
  • 2017年03月30日 16:38
  • 1085
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 编译,打包、签程名详细教
举报原因:
原因补充:

(最多只允许输入30个字)