android 编程实现Apk替换assets资源,Androidapk安装过程及Java、JNI读取安装包内assets资源文件的两种方法(附源码实例)...

问题背景:在PC上的程序可以轻松使用./或不用指明,默认读取的就是程序所在路径内的文件。但在Android上,应用程序被打包成apk,程序运行时无法直接获取apk(压缩包)内的文件。但在一些特殊场合,如加载图像处理训练好的分类器、模型等数据,要求每个apk到手机上都能运行,就必须解决这个问题。本文深入研究apk安装过程,给出三种方法解决这个问题。

一、android apk安装过程

Android

apk文件是将AndroidManifinest.xml、应用程序代码(.dex)、资源文件和其他文件打包成的一个压缩包文件,其中的.dex文件即使android上的可执行文件,由Java代码编译后的class文件链接而成。因此可以用unzip直接将apk打开。如下图所示,将本文后面要附源码的一个apk解压后示意图下:

a4c26d1e5885305701be709a3d33442f.png

1、assets文件夹,这个本文后面的源码专门就讲它,暂略。

2、lib文件夹,这里放着我们jni编译后生成的so文件。

3、META-INF文件夹,这个要追溯到java的jar文件。jar文件和zip文件唯一的区别就是包含一个META-INF文件夹,详见:这里。

4、res文件夹,就是所谓的资源文件,里面放的有各种图片资源(drawable文件夹下的东西)和布局xml文件。示图如下:

a4c26d1e5885305701be709a3d33442f.png

因此如果想借用一个apk的图片资源的话,直接解压就ok了。

5、AndroidManifinest.xml文件,这个就不多说了,每个Android工程文件都有。

6、classes.dex文件,Dex是Dalvik VM

executes的全称,即Android Dalvik执行程序,并非Java

ME的字节码而是Dalvik字节码。

7、resources.arsc文件,是编译后的二进制资源文件。

apk具体的核心安装步骤及牵涉到文件夹路径如下(以安装ReadAssets.apk为例):

第一步:复制apk文件到data/app/目录下,解压并扫描安装包,名字是以包名命名的,并不是apk的名字。如下:

a4c26d1e5885305701be709a3d33442f.png

第二步:将.dex文件保存到data/dalvik-cache目录,

a4c26d1e5885305701be709a3d33442f.png

第三步:在/data/data/目录下创建对应的应用数据目录,目录名字是apk的包名:

a4c26d1e5885305701be709a3d33442f.png

其中cache文件夹下的内容如下:

a4c26d1e5885305701be709a3d33442f.png

lib文件夹下是jni里生成的库,libReadAsset.so,如下:

a4c26d1e5885305701be709a3d33442f.png

转:https://blog.csdn.net/lihongyang1/article/details/70331813

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值