Android apk打包过程

APK构建过程-命令行编译 脱离Android Studio,如何构建一个可执行的APK文件 阅读详情

概述

android打包过程,下面这张图取自Android开发权威指南,非常清晰。

整个过程使用的工具有

名称功能介绍在操作系统中的路径
aaptAndroid资源打包工具${ANDROID_SDK_HOME}/platform-tools/appt
aidlAndroid接口描述语言转化为.java文件的工具${ANDROID_SDK_HOME}/platform-tools/aidl
javacJava Compiler${JDK_HOME}/javac或/usr/bin/javac
dex转化.class文件为Davik VM能识别的.dex文件${ANDROID_SDK_HOME}/platform-tools/dex
apkbuilder生成apk包${ANDROID_SDK_HOME}/tools/apkbuilder
jarsigner.jar文件的签名工具${JDK_HOME}/jarsigner或/usr/bin/jarsigner
zipalign字节码对齐工具${ANDROID_SDK_HOME}/tools/zipalign

使用aapt生成R文件

例如:aapt l <你的apk文件>,这个命令就是查看apk内容
permissions      打印app包的权限
resources        打印资源表
configurations   打印配置信息
xmltree          打印制定的xml信息
xmlstrings       打印制定字符串
        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] /
        [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] /
        [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] /
        [--rename-manifest-package PACKAGE] /
        [--rename-instrumentation-target-package PACKAGE] /
        [--utf16] [--auto-add-overlay] /
        [--max-res-version VAL] /
        [-I base-package [-I base-package ...]] /
        [-A asset-source-dir]  [-G class-list-file] [-P public-definitions-file] /
        [-S resource-sources [-S resource-sources ...]]         [-F apk-file] [-J R-file-dir] /

        [--product product1,product2,...] /

        [raw-files-dir [raw-files-dir] ...]

使用javac命令编译java源码

java [options]  [sourcefiles] [@files]
其中:
        options:命令行选项;
        sourcefiles:一个或多个要编译的源文件;
        @files:一个或多个对源文件进行列表的文件,有时候要编译的文件很多,一个个敲命令会显得很长,也不方便修改,可以把要编译的源文件列在文件中,在文件名前加@,这样就可以对多个文件进行编译,对编译一个工程很有用,方便,省事。
有几个比较重要的选项:
        -d 用于指定编译成的class文件的存放位置,缺省情况下不指定class文件的存放目录,编译的class文件将和源文件在同一目录下;
        -classpath 可以简写成-cp,用于搜索编译所需的class文件,指出编译所用到的class文件的位置,如jar、zip或者其他包含class文件的目录,指定该选项会覆盖CLASSPATH的设定;
        -sourcepath用于搜索编译所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目录;
        需要注意windows下和linux下文件路径分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的区别:
        windows下文件路径分隔符用 \ ,文件列表分隔符用分号 ;
        linux下文件路径分隔符用 / ,文件列表分隔符用冒号 :
  

下面我们来一步一步的分析一下。

aapt的用法有:

1. 列出apk包的内容

aapt l[ist] [-v] [-a] file.{zip,jar,apk}

        -v 以table形式列出来

        -a 详细列出内容

2. 查看apk一些信息

aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]

        badging          打印app包的label和icon

例如:aapt d permissions <apk文件>, 这个就是显示这个apk所具有的权限

3. 编译Android资源

aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] /

这个比较复杂,只解释几个关键参数。

        -f 如果编译出来的文件已经存在,强制覆盖。

-m 使生成的包的目录放在-J参数指定的目录。

-J 指定生成的R.java的输出目录

-S res文件夹路径

-A assert文件夹的路径

-M AndroidManifest.xml的路径

-I 某个版本平台的android.jar的路径

-F 具体指定apk文件的输出

例如:

1). 将工程的资源编译R.java文件

aapt package -m -J <R.java目录> -S <res目录> -I <android.jar目录>  -M <AndroidManifest.xml目录>

2). 将工程的资源编译编译到一个包里

aapt package -f  -S <res目录> -I <android.jar目录> -A<assert目录>  -M <AndroidManifest.xml目录> -F <输出的包目录>

4.  打包好的apk中移除文件

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]

例如:aapt r <你的apk文件> AndroidManifest.xml, 这个就是将apk中的AndroidManifest移除掉

5. 添加文件到打包好的apk中

aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]

例如:aapt a <你的apk文件> <要添加的文件路径>, 这个就是将文件添加到打包好的apk文件中

6.  显示aapt的版本

aapt v[ersion]

例如:aapt v, 就是打印这个结果 Android Asset Packaging Tool, v0.2

javac 用于编译Java文件,格式为:

使用Dex工具将class文件打包成dex文件

dx --dex [--debug] [--verbose] [--positions=<style>] [--no-locals]
[--no-optimize] [--statistics] [--[no-]optimize-list=<file>] [--no-strict]
[--keep-classes] [--output=<file>] [--dump-to=<file>] [--dump-width=<n>]
[--dump-method=<name>[*]] [--verbose-dump] [--no-files] [--core-library]
[--num-threads=<n>]
[<file>.class | <file>.{zip,jar,apk} | <directory>] ...
Convert a set of classfiles into a dex file, optionally embedded in a
jar/zip. Output name must end with one of: .dex .jar .zip .apk. Positions
options: none, important, lines.
dx --annotool --annotation=<class> [--element=<element types>]
  [--print=<print types>]
  dx --dump [--debug] [--strict] [--bytes] [--optimize]
  [--basic-blocks | --rop-blocks | --ssa-blocks | --dot] [--ssa-step=<step>]
  [--width=<n>] [<file>.class | <file>.txt] ...
    Dump classfiles, or transformations thereof, in a human-oriented format.
  dx --junit [-wait] <TestClass>
    Run the indicated unit test.
  dx --find-usages <file.dex> <declaring type> <member>
    Find references and declarations to a field or method.
    declaring type: a class name in internal form, like Ljava/lang/Object;
    member: a field or method name, like hashCode
  dx -J<option> ... <arguments, in one of the above forms>
    Pass VM-specific options to the virtual machine that runs dx.
  dx --version 打印版本号
  dx --help 打印帮助信息
    -d      Debug Mode: Includes debug files in the APK file.
    -u      Creates an unsigned package.
    -storetype Forces the KeyStore type. If ommited the default is used.
    -z      Followed by the path to a zip archive.
            Adds the content of the application package.
    -f      Followed by the path to a file.
            Adds the file to the application package.
    -rf     Followed by the path to a source folder.
            Adds the java resources found in that folder to the application
            package, while keeping their path relative to the source folder.
    -rj     Followed by the path to a jar file or a folder containing
            jar files.
            Adds the java resources found in the jar file(s) to the application
            package.
    -nf     Followed by the root folder containing native libraries to
            include in the application package.

使用aapt打包文件,命令已经在上面介绍过。

使用apkbuildert生成未签名的apk安装文件

需要注意的是,最新的android sdk已经找不到apkbuider这个命令了,

而使用sdklib.jar里面的com.android.sdklib.build.ApkBuilderMain这个类

使用jarsigner对未签名的包进行apk签名

第一步:生成keystore
第二步:jarsigner签名apk

keytool -genkey -v -keystore android.keystore -alias android.keystore -keyalg RSA -validity 20000

jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore

jarsigner用法: [选项] jar 文件别名

jarsigner -verify [选项] jar 文件

[-keystore <url>]           密钥库位置

[-storepass <口令>]         用于密钥库完整性的口令

[-storetype <类型>]         密钥库类型

[-keypass <口令>]           专用密钥的口令(如果不同)

[-sigfile <文件>]           .SF/.DSA 文件的名称

[-signedjar <文件>]         已签名的 JAR 文件的名称

[-digestalg <算法>]    摘要算法的名称

[-sigalg <算法>]       签名算法的名称

[-verify]                   验证已签名的 JAR 文件

[-verbose]                  签名/验证时输出详细信息

[-certs]                    输出详细信息和验证时显示证书

[-tsa <url>]                时间戳机构的位置

[-tsacert <别名>]           时间戳机构的公共密钥证书

[-altsigner <类>]           替代的签名机制的类名

[-altsignerpath <路径列表>] 替代的签名机制的位置

[-internalsf]               在签名块内包含 .SF 文件

[-sectionsonly]             不计算整个清单的散列

[-protected]                密钥库已保护验证路径

[-providerName <名称>]      提供者名称

[-providerClass <类>        加密服务提供者的名称

[-providerArg <参数>]] ... 主类文件和构造函数参数

使用Zipalign优化程序包

Usage: zipalign [-f] [-v] <align> infile.zip outfile.zip

zipalign -c [-v] <align> infile.zip

<align>: alignment in bytes, e.g. ’4′ provides 32-bit alignment

-c: check alignment only (does not modify file)

还有一些没有提到,比如编译so库,编译aidl文件。以后单独说明。



欢迎扫描二维码,一起学习交流



补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试 自定义view,Android开发的基本功。 阅读详情

相关推荐

移动开发(三):使用.NET MAUI打包第一个安卓APK完整过程

以上是.Net MAUI打包为apk的整个过程,亲测成功,感兴趣的朋友可以试一下,如果打包过程中有问题的话,欢迎评论区沟通交流!

IT技术分享社区 1565

android build apk过程详解

前言平时开发,编译apk由IDE完成,突然被问到,具体项目被编译成apk的过程是什么? 这个很尴尬, 下面做个介绍,简单了解一下apk文件包含apk :由dex、资源文件、so,签名文件等组成; dex : 包括R.class 、class、jar文件组成; jar : 不能直接运行,编译过程会将jar转换成dalvik所能识别的字节码文件;apk生成 流程步骤详解步骤中提到的工具如下表:名称

Android 工程化与移动架构实践 4285

从Android源码到apk——apk打包过程

Android程序是怎么从源码变成可以安装使用的apk的 流程官方版详细版上面就是一个关于构建过程的一个典型的流程图。 aapt(Android Asset Packaging Tool)给你的Activity提供所需的资源文件,如 AndroidManifest.xml,XML

SparkYuan 3311

Android AAPT详解

AAPT是什么 AAPT - Android Asset Packaging Tool,看全称,就可知道AAPT是Android资源打包工具。在讲这个之前,是有必要简单说下Android是如何构建一个APK的。 上图是Google官方发布的一张非常经典的Apk打包流程图。 流程概述: 工程的资源文件(res文件夹下的文件),通过AAPT打包成R.java类(资源索引表),...

weixin_39421817的博客 1812

Android APK文件结构 完整打包编译的流程 APK安装过程 详解

Android 构建系统编译应用资源和源代码,然后将它们打包成可测试、部署、签署和分发的 APK。一般使用 Android Studio开发的时候使用Gradle构建工具包来自动执行和管理构建流程,同时也可以灵活地自定义构建配置。 Gradle 和 Android 插件独立于 Android Studio 运行。所以我们可以在 Android Studio上或者计算机上的命令行构建 Android...

aha_jasper的博客 9051

ESD放电模式以及电源箝位 (power clamp )电路

由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工作将输出端Vout电压上拉到高电位。从而Vg端的高电位触发导通了NMOS元件(Mesd)的晶体管,因而ESD电流便经由Mesd而泄放掉。由于晶体管Mesd的栅极导通

DOG_BITE_DOG的博客 2万+

Apk安装和打包流程

Apk打包流程 1.aapt阶段:aapt工具编译res资源文件,把大部分xml文件编译成二进制文件(图片文件除外),同时生成R.Java文件和resources.arsc文件,里面保存了资源的ID和在APK中的路径。 2.aidl阶段:如果项目中有使用AIDL,那么就会把.aidl文件编译成.java文件。 3.javaCompiler阶段:将所有.java文件(包括R文件和AIDL生成的.java文件),通过javac工具生成class文件。 4.dex阶段:将生成的.class文件和第三方库的

wzj_what_why_how的博客 908

FUXA实战:5步搞定基于Web的SCADA系统搭建(含Node.js版本避坑指南)

本文提供了一份基于开源工具FUXA搭建Web版SCADA系统的实战指南。文章重点解析了从环境准备到生产部署的五个核心步骤,并特别强调了Node.js版本选择对西门子S7 PLC通信兼容性的关键影响,帮助开发者避开常见陷阱,快速构建工业监控界面。

weixin_29172963的博客 138

apkbuilder命令详解

THIS TOOL IS DEPRECATED and may stop working at any time!If you wish to use apkbuilder for a custom build system, please look at the com.android.sdklib.build.ApkBuilder which provides support for re

ygc87的专栏 9164

【pprof】简要学习教程

基本介绍 pprof 是在做性能优化前的性能分析工具。 安装: go get -u github.com/google/pprof 分析工具 go tool pprof 是命令行指令,用于分析 Profiling 数据,源数据可以是 http 地址,也可以是已经 dump 下当 profile 文件;查看模式可以命令行交互模式,也可以是浏览器模式(-http 参数)。 两种应用 服务型应用 _ "net/http/pprof" 包,专用于采集 web 服务 运行数据的分析。即在运行的服务中通过 API .

码农印象 883

FPGA新手必看:用USB转TTL实现串口通信的完整流程(附CH340G电路详解)

本文为FPGA新手提供了通过USB转TTL模块实现串口通信的完整实战指南。详细解析了CH340G电路设计要点、硬件连接方法,并分享了经过验证的Verilog代码框架,帮助读者快速掌握FPGA与PC通信的核心技术,解决电平匹配与波特率设置等常见问题。

cake8的博客 1048

android打包 安卓,ReactNative之Android打包APK方法(趟坑过程)

多余的不解释了。直接上车吧。中途遇到的问题我也写出来了(其实和官网教程相似但也有不同不然我也不会写出来了):遇到问题可以留言Android 打包 闪退的问题,极有可能是你签名配置不正确,建议仔细检查每个步骤,找不到问题建议命令打包根据错误提示解决1、生成签名秘钥:方法一:你可以用keytool命令生成一个私有密钥。在Windows上keytool命令放在JDK的bin目录中(比如C:\Progr...

weixin_30990711的博客 779

【UE5_蓝图】实时音频采集与动态WAV文件保存实战指南

本文详细介绍了在UE5中使用蓝图实现实时音频采集与动态WAV文件保存的完整流程。从插件配置、录音框架搭建到动态文件名生成和音频参数优化,提供了实用技巧和常见问题解决方案,特别适合需要快速实现音频采集功能的开发者。

weixin_29009669的博客 407

android apk编译打包过程

       Android安装包的后缀都是.apk, apk是Android Package的缩写。 解压apk文件后包含AndroidManifest.xml、assets目录、classes.dex(还可能有 classes2.dex,classes3.dex...classesN.dex)、lib目录、META-INF目录、res目录和resources.arsc。            ...

brycegao321的博客 1万+

Unity3d移动端性能优化

以下条目主要针对移动端,大部分也适合PC端 一、Profiler的使用 1.性能优化应贯穿项目开发的全过程,如需求(性能能不能达到要求)、设计、开发、测试等。不能开发结束才优化性能。 2.官方推荐的优化工具是【Window】->【Profiler】 3.确认瓶颈是CPU-bound(Gfx.WaitForCommands)还是CPU-bound(Gfx.WaitForPresent) 4.内存分析使用Memory Profiler 二、内存优作 5.减少内存收集的影...

zouxin_88的专栏 3055

向量数据库:PGVector

PGVector 是一个基于 PostgreSQL 的扩展插件,为用户提供了一套强大的向量存储和查询的功能

m0_37559973的博客 1万+

apk ionic 破损_IONIC 打包安卓apk详细过程

F:\GitCode\myApp>ionic cordova build android --release> ng run app:ionic-cordova-build --platform=androidDate:2018-10-23T08:40:55.031ZHash: bf05a92055d1e7f9f1aaTime: 26064mschunk {common} common...

weixin_39668965的博客 387

华为 MetaERP 总账模块依托 “交易即核算” 的事件驱动架构,与 Oracle EBS 相比,更强调业务事件自动触发财务动作、实时数据同步和智能规则引擎,实现业务与财务的深度融合

华为MetaERP总账模块采用"交易即核算"架构,相比Oracle EBS实现了三大突破:1)业务事件自动触发财务动作,如采购收货自动生成暂估凭证;2)业务财务数据实时同步,支持即时分析;3)内置智能规则引擎,实现自动匹配、核销和结转。该模块覆盖采购、销售、资产、薪酬等全业务场景,支持多维核算和关联交易自动抵消,显著提升核算效率与准确性。其中采购暂估、销售结转等场景实现全自动化处理,较EBS减少80%手工操作。

金牌架构师 222

Android APK打包过程

Android APK打包过程1.什么是APK2APK里面到底是什么3.AKP打包流程 1.什么是APK APK是 Android application package即安卓应用程序包的缩写,是能安卓运行在安卓操作系统的一种应用程序包文件格式。 在Android应用开发完成后,会将java/kotolin源代码,资源文件等经过一系列编译及压缩最终生成一个可安装在安卓操作系统的apk文件 编译打...

Legend的博客 1545

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android Apk打包过程概述_android是如何打包apk的

最近看了老罗关于android应用资源编译和打包过程的分析,过程比较复杂,这里结合其他资料,简要描述下打包过程,从整体上了解这个流程,感兴趣的再去详细研究过程。流程概述:1、打包资源文件,生成R.java文件2、处理aidl文件,生成相应java 文件3、编译工程源代码,生成相应class 文件4、转换所有class文件,生成classes.dex文件5、打包生成apk6、对apk文件进行签名7、

一个本科小生的奋斗史 5万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IONIC3 打包安卓apk详细过程(大量图文)

本文写于2018年2月12日 22:25:59。 如果2018年的新春之际,你遇到IONIC的开发问题,这将是一篇最为详尽的打包方案。 经历三天的踩坑,跳坑,相信绝大多数的问题都已经覆盖到了,请仔细按照流程来对照操作及检查。 1.基本依赖环境 nodejs环境 (作为一个前端相信你已经有了) 最好提前配置好node的环境变量,便于全局访问。 jdk(下面细说) SDK(下面...

Tycho‘s Blog 5万+

Android Apk打包过程概述_Android是如何打包apk的

http://www.androidchina.net/2133.html 最近看了老罗分析android资源管理和apk打包流程的博客,参考其他一些资料,做了一下整理,脱离繁琐的打包细节和数据结构,从整体上概述了apk打包的整个流程。 流程概述: 1、打包资源文件,生成R.java文件 2、处理aidl文件,生成相应java 文件 3、编译工程源

xyxjn的专栏 813

❤️Android Apk 的打包过程 ❤️ 只需两幅图

在分析安装过程之前,需要先了解一下 Android 项目是如何经过编译->打包生成最终的 .apk 格式的安装包。谷歌有一张官方图片来描述 apk 的打包流程,如下图所示。 Android 应用模块的构建过程(如上图所示)遵循以下一般步骤: 1、编译器将你的源代码转换为 DEX(Dalvik 可执行文件)文件,其中包括在 Android 设备上运行的字节码,以及其他所有内容到编译资源中。 2、APKPackager将DEX文件和编译后的资源组合成一个APK。但是,在将你的

帅次的博客 6445

从Android 8.0源码的角度剖析APK打包、安装过程

文章目录1. APK打包过程1.1 APK文件结构1.2 APK打包过程2. APK安装过程2.1 拷贝APK2.2 解析APK  APK,全称Android Application Package,即Android应用程序包,是Android系统使用的一种应用程序包文件格式,它的作用是将Android程序和资源整合在一起,以便Android程序能在Android设备上正常运行。简单地说,就是一个...

老蒋也疯狂 3193

Android APK 打包过程

在日常开发中,每天都会点击 Android Studio 的 run 按钮运行很多次应用,Android Studio 很好地帮我们隐去了 APK 的生成流程,这中间经历了哪些流程,这里简单梳理记录下。 Android APK 本质上是一个压缩包,打开后会发现就是各种资源文件、一或多个 dex 文件、AndroidManifest.xml、resources.arsc 以及其他一些文件组成的。 ...

Jaqen's Blog 332

Android Apk 的打包过程 只需两幅图

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节以上【历年大厂高级工程师面试题集】、【Android高级进阶教学视频】、【Android高级知识点学习PDF】皆无偿分享给大家。

m0_62261166的博客 1227
上一篇: android Cursor的自动管理方式
下一篇: JUnit单元测试
robert_chao
博客等级 码龄15年 265粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值