android编译apk,android编译系统

Android APK编译流程

apk 是Android Package的简写, 在平时的开发过程中,通过点击 Run app 按钮 或者 在命令行中输入

创新互联建站于2013年创立,是专业互联网技术服务公司,拥有项目网站设计制作、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元张湾做网站,已为上家服务,为张湾各地企业和个人服务,联系电话:13518219792

这样Android Studio就会启动构建流程,最终输出一个我们想要的APK。

直达官网介绍

对于小白来说,上面一张图已经可以解释apk的构建过程了,不过对于Andoid开发者而言还需要了解一些更详细的构建过程。

详细的对应步骤 和 使用工具如下:

资源文件(res文件夹下的文件)通过 AAPT(Android Asset Packaging Tool)打包生成R.java类(资源索引表)、.arsc资源文件 和res文件。

resources.arsc 是一个App的资源索引表,通过R.java 文件 和 resources.arsc 可以定位到资源的内存地址,resources.arsc文件的作用是通过一样的ID,根据不同的配置索引到最佳的资源显示在UI中。

AIDL (Android Interface Definition Language), 是Android接口定义语言,是Android提供的IPC (Inter Process Communication,进程间通信)的一种独特实现。

如果有aidl文件,这个阶段会生成对应的Java接口文件。

R.java文件、工程源码文件、aidl.java文件, 在这一步通过javac生成.class文件。

源码.class文件和第三方jar或者library通过dx工具打包成dex文件

Android系统的Dalvik虚拟机的可执行文件为DEX格式,所以这里会将上一步中生成的.class文件 和 引用的第三方jar等过程中的.class 一起通过dx工具打包成dex文件

apkbuilder工具会将所有没有编译的资源、.arsc资源、.dex文件打包到一个完成apk文件中

tips:

apksigner工具会对未签名的apk验证签名。得到一个签名后的apk(signed.apk)

apksigner 是google 退出的V2签名方式

Jarsigner 是之前一直使用的V1签名方式

可以通过在命令行中输入apksigner --help来获取详情信息,如果没有特殊需求,使用下面命令即可完成签名

release mode 下使用 aipalign进行align,即对签名后的apk进行对齐处理

所谓对齐,主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用主要是为了减少运行时内存的使用。

zipalign是一个android平台上整理APK文件的工具,它对apk中未压缩的数据进行4字节对齐,对齐后就可以使用mmap函数读取文件,可以像读取内存一样对普通文件进行操作。如果没有4字节对齐,就必须显式的读取,这样比较缓慢并且会耗费额外的内存。

参考文章:

Android-Studio配置构建

浅谈Android打包流程

apk打包流程

END!

Android Studio 编译apk,so库一起打包

如下图所示,在编译apk的时候,我需要把libs/armeabi-v7a下的so库一起打包到apk里面。

需要在build.gradle中添加如下内容:

ndk {

abiFilters "armeabi-v7a"

}

sourceSets.main.jniLibs.srcDirs = ['libs']

===============================================================

深圳上班,

生活简简单单,

14年开始从事Android Camera相关软件开发工作,

做过车载、手机、执法记录仪......

公众号记录生活和工作的点滴,

关注“小驰笔记”,期待和你相遇~

Android 如何对apk文件进行反编译以及重新

第一:使用apktool直接反编译apk

第二:apk中包含的内容

第三:进入到hellodemo\smali\com\example\hello,打开MainActivity.smali。找到:

const-string v1, "\u4f60\u597d",

修改为:

const-string v1, "hello",

第四:然后在命令行输入:apktool b hellodemo hellodemo1.apk。这回重新打包成hellodemo1.apk。

第五:然后给新生成的apk进行签名。把这个apk拷贝到autosign的目录下面,然后切换过去,在命令行输入:java -jar signapk.jar testkey.x509.pem testkey.pk8 hellodemo1.apk hellodemo.apk。

第六:把生成的hellodemo.apk安装到手机,可以看到主界面上已经显示的是hello,而不再是你好。说明反编译重新打包成功!

Android的编译打包流程详解

下图的是官网对于Android编译打包流程的介绍。

官方的介绍非常笼统,简而言之,其大致流程就是:

编译--DEX--打包--签名和对齐

(好像什么都没Get到,有一种意犹未尽的感觉……)

来一张外国大神的图片(注:这张图少了签名的步骤)

用文字解释一下上图的流程:

首先,我们整理一下编译的输入部分是什么(图中黄色部分):

接下来的步骤:

好了,编译打包的详细流程说完了,接下来我们看看是否能回答开篇的那些问题。

答:aapt工具对于每个资源文件生成了唯一的ID,这些ID保存在R.java文件中。如下是R.java文件的内容:

资源ID是一个4字节的无符号整数,在R.java文件中用16进制表示。其中,最高的1字节表示Package ID,次高1个字节表示Type ID,最低2字节表示Entry ID。

只有一个ID如何能引用到实际资源呢?实际上aapt工具还生成了一个文件resources.arsc,相当于一个资源索引表,或者你理解成一个map也行,map的key是资源ID,value是资源在apk文件中的路径。resources.arsc里面还有其他信息,这个就不多说了。

通过R.java文件和resources.arsc配合,就能引用到实际的资源文件。

答:第7步已经阐述了对齐所做的工作,为什么要进行对齐,这是为了加快资源的访问速度。如果每个资源的开始位置都是上一个资源之后的 4*n字节,那么访问下一个资源就不用遍历,直接跳到4*n字节处判断是不是一个新的资源即可。

如果举例子,那么对齐有点类似于资源数组化,数组的访问速度当然比链表快。

答:xml里面都是各种字符,不利于快速遍历。编译成二进制文件,用数字替换各种符号,一方面能快速访问,另一方面也能减少大小。


文章题目:android编译apk,android编译系统
浏览地址:http://myzitong.com/article/dsdpghh.html