zoukankan      html  css  js  c++  java
  • Windows环境手动DOS命令构建apk文件

    第一步 抽取资源id,生成R.java

     aapt p[ackage] -f [-A <assets>] -S <res> -M <AndroidManifest.xml> -J <package> -I <android.jar>

    参数-JPF决定aapt的输出: -J 输出R.java -P 输出公共资源索引public.xml -F 输出无字节码文件的apk

    eg:

     D:PersonalDocumentsGitHubLoginsrc>aapt p -f -M .AndroidManifest.xml -S .res -J .srccnlogin -I E:Androidandroid-sdkplatformsandroid-15android.jar

    第二步 生成.class,尽量指定javac版本

     javac -target 6 -source 6 *.java

    凡是有java源码的目录都要执行一下,包括R.java(尽量把R.java放到包对应的目录下)

    eg:

     D:PersonalDocumentsGitHubLoginsrcsrccnlogin>javac -target 6 -source 6 *.java

    第三步 生成.dex,需要使用dx.jar,可将其加入环境变量classpath中,不建议使用dx.bat脚本

     java com.android.dx.command.Main --dex --output=<classes.dex> <dir> <!--将dir及其子目录下所有class文件打包为dex字节码文件-->

    eg:

     D:PersonalDocumentsGitHubLoginsrcsrc>java com.android.dx.command.Main --dex --output=..inclasses.dex .

    经过以上步骤,得到classes.dex文件,这是最终版本,会被打包进入apk.

    第四步 整合资源(AndroidManifest.xml及res目录下相关xml资源被加密,values目录下的索引资源被加密打包为resources.arsc)

     aapt p[ackage] -f -M <AndroidManifest.xml> -S <res> -F <init.apk> -I <android.jar> 

    eg:

     D:PersonalDocumentsGitHubLoginsrc>aapt package -f -M .AndroidManifest.xml -S . es -F .ininit.apk -I E:Androidandroid-sdkplatformsandroid-15android.jar 

    得到init.apk,这是一个仅缺少classesl.dex和签名的apk

    第五步 添加classes.dex,这是一个简单的zip任务,命令apkbuilder使用到sdklib.jar的类com.android.sdklib.build.ApkBuilderMain.

     java com.android.sdklib.build.ApkBuilderMain <out.apk> -v -u -z <init.apk> -f <classes.dex> 

    eg:

     D:PersonalDocumentsGitHubLoginsrc>java com.android.sdklib.build.ApkBuilderMain .inout.apk -v -u -z .ininit.apk -f .inclasses.dex 

    第六步 签名,使用jdk工具jartool和jarsigner.

    生成签名文件:

     keytool -genkey -alias <user> -keyalg RSA -validity 36500 -keystore <android.keystore> <!--alias指定别名,是用户的标识-->

    eg:

     keytool -genkey -alias develon -keyalg RSA -validity 36500 -keystore .inandroid.keystore 

    --此时会提示输入一些必要信息,确认时输入Y即可

    签名:

     jarsigner -verbose -keystore <android.keystore> -signedjar <signed.apk> <out.apk> <user> 

    eg:

     D:PersonalDocumentsGitHubLoginsrc>jarsigner -verbose -keystore .inandroid.keystore -signedjar .insigned.apk .inout.apk develon 

    --此时需要输入密钥库口令和用户口令

    现在,apk已经可以安装使用了

    例子中的项目结构如下

    D:PersonalDocumentsGitHubLoginsrc
      bin
    -init.apk
    -classes.dex
    -out.apk
    -android.keystore
    -signed.apk src |--cn |--login -R
    .java -LoginAct.java
    -*.class res
    |--drawable
    -ic_launcher.png
    |--layout
    -login_view.xml
    |--values
    -strings.xml
    AndroidManifest
    .xml
    build.bat

    现在我们完全可以写一个批处理程序,来一步生成我们的apk文件,需要注意的是不要把各种目录混淆了.

    build.bat的内容如下

    @echo off %关闭回显%
    D:
    cd %~dp0 %进入项目根目录%
    
    %定义android.jar路径%
    set ajar=E:Androidandroid-sdkplatformsandroid-15android.jar
    
    %定义项目包名%
    set pkg=cnlogin
    
    echo 生成R.java文件
    aapt p -M .AndroidManifest.xml -A .assets -S .
    es -J .src%pkg% -I %ajar%
    pause
    
    echo 生成JVM字节码文件
    javac -target 6 -source 6 .srccnlogin*.java
    pause
    
    echo 生成DalvikVM字节码文件并归档为classes.dex-^>需手动创建bin目录
    java com.android.dx.command.Main --dex --output=.inclasses.dex .src
    pause
    
    
    echo 生成init.apk 不含字节码 未签名 不能安装
    aapt p -f -M .AndroidManifest.xml -A .assets -S .
    es -F .ininit.apk -I %ajar%
    pause
    
    echo 添加字节码classes.dex-^>需将sdklib.jar添加到环境变量classpath中
    java com.android.sdklib.build.ApkBuilderMain %cd%inout.apk -v -d -u -z %cd%ininit.apk -f %cd%
    
    inclasses.dex
    pause
    
    echo 签名out.apk-^>binsigned.apk %签名密钥库android.keystore放到bin下%
    jarsigner -verbose -keystore .inandroid.keystore -signedjar .insigned.apk .inout.apk **
    pause
    
    echo 任务完成
    pause
    点击+打开代码

    效果大概就是这个样子

    以上.

  • 相关阅读:
    前端-微信公众号开发(jssdk)
    wampserver 配置本地环境局域网内pc移动访问
    客户端缓存之localStorage and sessionStorage
    webpack+vue搭建基础
    高德地图javascriptAPI基本使用心得(下)
    高德地图javascriptAPI基本使用心得(上)
    表单单选多选项清除默认样式小技巧
    (原创)C#零基础学习笔记003-流程控制语句
    (原创)C#零基础学习笔记002-表达式与运算符
    (原创)C#零基础学习笔记000-学习结构
  • 原文地址:https://www.cnblogs.com/develon/p/6701769.html
Copyright © 2011-2022 走看看