码迷,mamicode.com
首页 > 移动开发 > 详细

Android打包

时间:2019-02-07 12:14:38      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:src   key   out   depends   XML   ebe   ack   splash   文件系统   

 

  • 01.android打包流程图

注意:

-(1)必须使用AS的SDK(纯净版),避免出问题不能Eclipse

-(2)建议使用Eclipse学习打包,Eclipse目录结构简单

 

 技术图片

 

1.生成R文件,调用命令aapt.exe(sdk\build-tools\23.0.3) 
2.编译aidl文件,调用命令aidl(sdk\build-tools\23.0.3) 
3.编译所有的java文件,调用命令jdk的javac.exe 
4.解压第三方jar包,调用命令jdk的jar 
5.生成dex文件,调用命令dx.bat(sdk\build-tools\23.0.3) 
6.生成资源包文件resources.ap_,调用命令aapt.exe 
7.生成未签名apk,调用命令apkbuilder.bat(sdk\tools) 
8.生成签名apk,调用命令jdk的jarsigner.exe

  • 02.命令行打包生成R文件

任何图形化解密底层都是命令

为了在任何目录都能够调用aapt.exe命令,需要配置到path环境变量 
命令

E:\bakclass\CmdDemo>aapt p -f -m -J build\gen -S res -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -M AndroidManifest.xml

 

  • 03.命令行打包编译java文件

先跳过编译aidl文件 
注意:使用jdk不能使用1.8,建议使用1.7

命令

E:\bakclass\CmdDemo>D:\ProgramFiles\Java1.7\jdk1.7.0_80\bin\javac.exe -encoding utf-8 -bootclasspath D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -cp libs\android-support-v4.jar -d build\classes src\com\ngyb\cmddemo\MainActivity.java build\gen\com\ngyb\cmddemo\R.java

 

  • 04.命令行打包解压第三方jar

调用jdk的jar.exe命令

命令

jar xvf ..\..\libs\android-support-v4.jar

 

  • 05.命令行打包生成dex文件

非常非常注意:必须使用AS的SDK(纯净版)、必须使用jdk1.7

命令所在目录sdk\build-tools\23.0.3\dx.bat

使用jdk1.8,生成dex文件报错:建议使用jdk1.7

技术图片

 

 

 

 

解决上述问题:重新编译java文件,使用jdk1.7

dx --dex --output=E:\bakclass\CmdDemo\build\classes.dex E:\bakclass\CmdDemo\build\classes

 

  • 06.命令行打包编译资源文件

命令

E:\bakclass\CmdDemo>aapt p -f -M AndroidManifest.xml -S res -A assets -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -F build\resoures.ap_

 

  • 07.命令行打包生成未签名apk文件

调用命令:sdk\tools\apkbuilder.bat

命令

E:\bakclass\CmdDemo>apkbuilder E:\bakclass\CmdDemo\build\Demo_unsigned.apk -u -z E:\bakclass\CmdDemo\build\resoures.ap_ -f E:\bakclass\CmdDemo\build\classes.dex -rf E:\bakclass\CmdDemo\src -rj E:\bakclass\CmdDemo\libs

 

  • 08.生成keystore

没有签名不能安装,没有证书信息

debug.keystore目录:C:\Users\用户名.android\debug.keystore

debug.keystore运行测试项目,给apk签名,上线项目必须使用公司自己的keystore

技术图片

 

生成keystore图形化界面

技术图片

 

生成keystore命令(秘钥对称:公钥和使用)

E:\bakclass\CmdDemo>keytool -genkeypair -alias ngyb -keyalg "RSA" -validity 3650 -keystore ngyb.jks

 

  • 09.命令行打包生成签名apk文件

命令所在目录:jdk/bin/jarsigner.exe

通过命令行获取keystore别名

keytool -list -keystore ngyb.jks -v

 

命令

E:\bakclass\CmdDemo>jarsigner -keystore ngyb.jks -storepass 123456 -keypass 123456 -signedjar build\Demo_signed.apk build\Demo_unsigned.apk ngyb

 

  • 10.手机卫士打包生成R文件

命令

aapt p -f -m -J build\gen -S res -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -M AndroidManifest.xml

 

  • 11.手机卫士打包编译aidl文件

aidl目录所在目录:sdk\build-tools\23.0.3\aidl.exe

编译2个aidl文件

E:\南宫燚滨\day1\MobileSafe>aidl -Isrc -pD:\ProgramFiles\Android\sdk\platforms\android-18\framework.aidl -obuild\gen src\android\telephony\NeighboringCellInfo.aidl

 

E:\南宫燚滨\day1\MobileSafe>aidl -Isrc -pD:\ProgramFiles\Android\sdk\platforms\android-18\framework.aidl -obuild\gen src\com\android\internal\telephony\ITelephony.aidl

 

  • 12.手机卫士打包编译java文件

调用jdk1.7的javac.exe命令

D:\ProgramFiles\Java1.7\jdk1.7.0_80\bin\javac.exe -encoding utf-8 -bootclasspath D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -cp libs\android-support-v4.jar;libs\nineoldandroids-2.4.0.jar; -d build\classes build\gen\com\android\internal\telephony\ITelephony.java build\gen\com\ngyb\safe\R.java src\com\ngyb\safe\activity\AppManagerActivity.java src\com\ngyb\safe\activity\BlackEditActivity.java src\com\ngyb\safe\activity\CallSmsSafeActivity.java src\com\ngyb\safe\activity\CommonNumberActivity.java src\com\ngyb\safe\activity\CommonNumberActivity.java src\com\ngyb\safe\activity\CommonToolActivity.java src\com\ngyb\safe\activity\HomeActivity.java src\com\ngyb\safe\activity\NumberAdressActivity.java src\com\ngyb\safe\activity\SelectContactActivity.java src\com\ngyb\safe\activity\SelectContactActivity2.java src\com\ngyb\safe\activity\SettingActivity.java src\com\ngyb\safe\activity\SjfdActivity.java src\com\ngyb\safe\activity\SjfdBaseSetupActivity.java src\com\ngyb\safe\activity\SjfdSetupActivity1.java src\com\ngyb\safe\activity\SjfdSetupActivity2.java src\com\ngyb\safe\activity\SjfdSetupActivity3.java src\com\ngyb\safe\activity\SjfdSetupActivity4.java src\com\ngyb\safe\activity\SjfdSetupActivity5.java src\com\ngyb\safe\activity\SplashActivity.java src\com\ngyb\safe\bean\AddressBean.java src\com\ngyb\safe\bean\AppBean.java src\com\ngyb\safe\bean\BlackBean.java src\com\ngyb\safe\bean\ContactBean.java src\com\ngyb\safe\bean\HomeBean.java src\com\ngyb\safe\business\AppProvider.java src\com\ngyb\safe\db\BlackDao.java src\com\ngyb\safe\db\BlackDB.java src\com\ngyb\safe\db\BlackDBOpenHelper.java src\com\ngyb\safe\db\CommonNumberDao.java src\com\ngyb\safe\db\NumberAddressDao.java src\com\ngyb\safe\receiver\BootcompletedReceiver.java src\com\ngyb\safe\receiver\SafeAdminReceiver.java src\com\ngyb\safe\receiver\SmsReceiver.java src\com\ngyb\safe\service\CallSmsSafeService.java src\com\ngyb\safe\service\GPSService.java src\com\ngyb\safe\service\NumberAddressService.java src\com\ngyb\safe\test\TestBlackDao.java src\com\ngyb\safe\utils\Constants.java src\com\ngyb\safe\utils\ContactUtils.java src\com\ngyb\safe\utils\GZipUtils.java src\com\ngyb\safe\utils\PackageUtils.java src\com\ngyb\safe\utils\PreferenceUtils.java src\com\ngyb\safe\utils\ServiceStateUtils.java src\com\ngyb\safe\view\AddressDialog.java src\com\ngyb\safe\view\AddressToast.java src\com\ngyb\safe\view\FocusedTextView.java src\com\ngyb\safe\view\ProgressStateView.java src\com\ngyb\safe\view\SettingItemView.java

 

  • 13.手机卫士打包解压第三方jar

解压2个jar包

jar xvf ..\..\libs\android-support-v4.jar

jar xvf ..\..\libs\nineoldandroids-2.4.0.jar

 

  • 14.手机卫士打包生成dex文件

命令

E:\南宫燚滨\day1\MobileSafe>dx --dex --output=E:\南宫燚滨\day1\MobileSafe\build\classes.dex E:\南宫燚滨\day1\MobileSafe\build\classes

 

  • 15.手机卫士打包生成资源包文件

命令

E:\南宫燚滨\day1\MobileSafe>aapt p -f -M AndroidManifest.xml -S res -A assets -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -F build\resources.ap_

 

  • 16.手机卫士打包生成未签名apk

命令

E:\南宫燚滨\day1\MobileSafe>apkbuilder E:\南宫燚滨\day1\MobileSafe\build\MobileSafe_unsigned.apk -u -z E:\南宫燚滨\day1\MobileSafe\build\resources.ap_ -f E:\南宫燚滨\day1\MobileSafe\build\classes.dex -rf E:\南宫燚滨\day1\MobileSafe\src -rj E:\南宫燚滨\day1\MobileSafe\libs

 

  • 17.手机卫士打包生成签名apk

调用jdk命令jarsigner.exe

E:\南宫燚滨\day1\MobileSafe>jarsigner -keystore ngyb.jks -storepass 123456 -keypass 123456 -signedjar build\MobileSafe_signed.apk build\MobileSafe_unsigned.apk ngyb

 

签名apk多出目录:META-INF

  • 18.回顾打包流程图

1.生成R.java文件,调用sdk的aapt.exe 
2.编译aidl文件 -> 生成java文件,调用sdk的aidl.exe 
3.编译所有的java文件,生成class文件,调用1.7jdk的javac.exe 
4.解压第三方jar包,生成class文件,调用jdk的jar.exe 
5.生成classes.dex文件,调用命令dx.bat

6.编译资源文件,生成resources.ap_,调用命令aapt

7.生成未签名apk,调用apkbuilder.bat,不能安装 
8.生成签名apk,调用jdk的jarsigner.exe

  • 19.简单了解非对称加密RSA

RSA:非对称加密算法

秘钥对:公钥和私钥

公钥加密私钥解密;私钥加密公钥解密

  • 20.ant打包集成ant

借助代码提示:ant.dtd导入Eclipse(导入类型文件系统) 
项目根目录创建build.xml

  • 21.ant打包简单语法

明天项目自动化:jenkins

执行ant命令,需要安装环境apache-ant-1.9.7,需要调用ant.bat命令编译ant脚本文件

调用语法:ant target任务名称

<project name="MobileSafe">

    <target name="hello">

        <echo message="你好,我是ant"></echo>

    </target>

</project>

 

22.ant打包常用语法

    <?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE project SYSTEM "ant.dtd" > -->
<!-- 为了快速入门:代码提示 -->
<!-- project:项目跟标签 ,name属性项目名称,default:默认执行的任务,basedir,-->

<!-- ant:一切皆任务,任务为驱动 -->
<!-- target:任务标签 -->
<!-- echo:打印输出标签,输出内容通过message属性指定 -->
<!-- 创建目录标签mkdir,通过dir属性指定目录位置 -->
<!-- 删除目录标签delete,通过dir属性指定删除目录 -->

<!-- depends:属性,指定任务直接的依赖关系,多个任务逗号隔开 -->

<project name="MobileSafe" default="hello">
   <!--  相当于抽象成员变量 -->
   <property name="buildDir" location="E:\ngyb\MobileSafe\build_new"/>
    
    <target name="hello">
        <echo message="你好,我是ant"></echo>
    </target>
    
      <target name="hello2">
        <echo message="${buildDir}"></echo>
    </target>
    
    
      <!-- 先删除,在创建目录 -->
     <target name="deleteDir">
        <delete dir="E:\ngyb\MobileSafe\build_new"/>
    </target>
    
    <!-- 创建目录 -->
    <target name="createDir" depends="deleteDir">
        <mkdir dir="${buildDir}"/>
    </target>
    
    <!-- 删除目录 -->
  <!--    <target name="deleteDir">
        <delete dir="E:\ngyb\MobileSafe\build_new"/>
    </target> -->
    
</project>

 

 

  • 23.ant打包手机卫士初始化
    <!--  项目初始化:删除build目录,创建build目录 -->
   <target name="initProject">
       <echo message="初始化任务"/>
       <delete dir="E:\ngyb\MobileSafe\build"/>
       <mkdir dir="E:\ngyb\MobileSafe\build\gen"/>
   </target>

 




  • 24.ant打包手机卫士-生成R文件
 <target name="generateR" depends="initProject">

 <exec executable="${aapt.exe}">

    <arg value="p"/>

    <arg value="-f"/>

    <arg value="-m"/>

    <arg value="-J"/>

    <arg value="${genDir}"/>

    <arg value="-S"/>

    <arg value="${resDir}"/>

    <arg value="-I"/>

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

    <arg value="-M"/>

    <arg value="${manifest.xml}"/>

</exec>

 

 

  • 25.ant打包手机卫士-编译aidl文件
 <target name="compileAidl" depends="generateR">

   <echo message="任务2:编译aidl文件"/>

   <apply executable="${aidl.exe}">

       <arg value="-I${srcDir}"/>

       <arg value="-p${framework.aidl}"/>

       <arg value="-o${genDir}"/>

       <fileset includes="**/*.aidl" dir="${srcDir}"/>

   </apply>

 

 

  • 26.ant打包手机卫士-编译java文件
  <target name="compileJava" depends="compileAidl,initJavac">

   <echo message="任务3:编译java文件"/>

   <javac encoding="utf-8"

       bootclasspath="${android.jar}"

       destdir="${classesDir}"

       target="1.7"

       source="1.7"

       executable="${javac.exe}"

       includeantruntime="true">

 

       <classpath>

           <fileset includes="**/*.jar" dir="${libsDir}"/>

       </classpath>

       <src path="${srcDir}"/>

       <src path="${genDir}"/>

 

   </javac>

 

 

  • 27.ant打包手机卫士-解压第三方jar
<target name="unZipLibs" depends="compileJava">

   <echo message="任务4:解压第三方jar包"/>

   <unjar dest="${classesDir}">

       <!-- fileset:指定解压jar包路径、类型 -->

       <fileset dir="${libsDir}" includes="**/*.jar"/>

   </unjar>

 

 

  • 28.ant打包手机卫士-生成dex文件

报错:前面编译java文件使用jdk1.8

 技术图片

 

 <target name="compileDex" depends="unZipLibs">

   <echo message="任务5:生成dex文件"/>

   <exec executable="${dx.bat}">

       <arg value="--dex"/>

       <arg value="--output=${classes.dex}"/>

       <arg value="${classesDir}"/>

   </exec>

 

 

  • 28.ant打包手机卫士-生成资源包文件

 

<target name="compileResources" depends="compileDex">

   <echo message="任务6:编译资源文件"/>

   <exec executable="${aapt.exe}">

       <arg value="p"/>

       <arg value="-f"/>

       <arg value="-M"/>

       <arg value="${manifest.xml}"/>

       <arg value="-S"/>

       <arg value="${resDir}"/>

       <arg value="-A"/>

       <arg value="${basedir}\assets"/>

       <arg value="-I"/>

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

       <arg value="-F"/>

       <arg value="${resourcesAp}"/>

   </exec>

 

 

  • 29.ant打包手机卫士-生成未签名apk

 

<target name="generateUnsignedApk" depends="compileResources">

   <echo message="7.生成未签名apk"/>

   <exec executable="${apkbuilder.bat}">

       <arg value="${unsignedApk}"/>

       <arg value="-u"/>

       <arg value="-z"/>

       <arg value="${resourcesAp}"/>

       <arg value="-f"/>

       <arg value="${classes.dex}"/>

       <arg value="-rf"/>

       <arg value="${srcDir}"/>

       <arg value="-rj"/>

       <arg value="${libsDir}"/>

   </exec>

 

 

  • 31.ant打包手机卫士-生成签名apk
<target name="generateSignedApk" depends="generateUnsignedApk">

   <echo message="任务8:生成签名apk"/>

   <exec executable="${jarsigner.exe}">

       <arg value="-keystore"/>

       <arg value="${ngyb.jks}"/>

       <arg value="-storepass"/>

       <arg value="123456"/>

       <arg value="-keypass"/>

       <arg value="123456"/>

       <arg value="-signedjar"/>

       <arg value="${signedApk}"/>

       <arg value="${unsignedApk}"/>

       <arg value="ngyb"/>

   </exec>

 

 

  • 32.ant打包手机卫士-收尾

优化:便于回去使用,修改代码
1.所有property统一管理
2.环境变量

<property environment="env"></property>

 

<target name="printEnv">

<echo message="android的SDK环境变量:${env.JAVA_HOME}"/>

</target>

 

ant脚本使用环境变量

<property environment="env"></property>

<property name="android_sdk" location="${env.ANDROID_SDK}"/>

<property name="aapt.exe" location="${android_sdk}\build-tools\23.0.3\aapt.exe"/>

 

工具软件

http://www.androiddevtools.cn/ 
快速搜索软件:http://www.listary.com/

 

Android打包

标签:src   key   out   depends   XML   ebe   ack   splash   文件系统   

原文地址:https://www.cnblogs.com/nangongyibin/p/10354597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!