Android APK安装后资源文件(res/assets)位置

Android APK安装后资源文件(res/assets)位置

  • 问题背景
  • 问题分析
  • Android APK安装后资源文件(res/assets)位置
    • 应用安装涉及到的文件夹
    • 实际操作

目前在做机顶盒、IPTV相关的开发,入职没多久,说实话,深刻感受到了来自顶级程序员大佬的压迫感呀(瑟瑟发抖ing),也体会到自己需要学习的部分非常多,学无止境,温故知新吧,希望在1年之内能够入大佬的眼,为了这个阶段目标还是需要时常记录问题,积累知识,向着大佬和星辰大海,出发!

问题背景

这并不是一篇记录 APK 安装流程的文章,而是一个实际应用时遇到的问题而学习到的知识。
这个问题是做一个调用公司 framework 中的接口完成动态更新logo的APK。下面是公司文档中暴露出来的接口。
Android APK安装后资源文件(res/assets)位置_第1张图片

问题分析

我们可以看到,接口需要的参数为String格式的图片路径,当时想法就像将图片放到APK的drawable文件夹内,成为APK的resource,path路径就写成package/res/drawable/XX.jpg,以此来调用该图片,结果在调用时报错no such file or directory 由此报错,引发了我对标题的疑问。

Android APK安装后资源文件(res/assets)位置

应用安装涉及到的文件夹

  • /system/app :系统自带的应用程序,获得adb root权限才能删除
  • /data/app :用户程序安装的文件夹。安装时把apk文件复制到此文件夹
  • /data/data :存放应用程序的数据
  • /data/dalvik-cache:将apk中的dex文件安装到dalvik-cache文件夹下(dex文件是dalvik虚拟机的可运行文件,当然,ART–Android Runtime的可运行文件格式为oat。启用ART时,系统会运行dex文件转换至oat文件)
  • /data/system :该文件夹下的packages.xml文件。相似于Windows的注冊表,这个文件是在解析apk时由writeLP()创建的。里面记录了系统的permissions,以及每一个apk的name,codePath,flags,ts,version,uesrid等信息。这些信息主要通apk的AndroidManifest.xml解析获取,解析完apk后将更新信息写入这个文件并保存到flash,下次开机直接从里面读取相关信息加入到内存相关列表中。当有apk升级,安装或删除时会更新这个文件。

实际操作

我们可以看到应用安装的程序应该在/data/app文件夹下,那我们进入看一下:
Android APK安装后资源文件(res/assets)位置_第2张图片
可以看到我们安装之后生成的以 package 命名的文件夹,按照我们的剧本,这里面应该按照我们源码的目录结构展示,然后在我们调用接口时,写上这个路径的绝对地址找到图片
Android APK安装后资源文件(res/assets)位置_第3张图片
但是,实际上我们进去看:
Android APK安装后资源文件(res/assets)位置_第4张图片
一个 apk 文件,lib文件夹;没有按照剧本走呀

这个时候想到,会不会在/data/data目录下呢?进去看一下:
Android APK安装后资源文件(res/assets)位置_第5张图片
希望又出现了,我们发现了存放我们APK应用数据的文件夹,进去看看:
Android APK安装后资源文件(res/assets)位置_第6张图片
哦吼,希望破灭~ 那难道APK内的资源文件就消失了吗?

当然不会!

还记得/data/app目录下的那个图中的 apk 文件吗:
在这里插入图片描述
事实上,apk安装之后会放在/data/app/**.apk目录下,以apk形式存在,asset/res和被绑定在apk里,并不会解压到/data/data/YourApp目录下去,所以我们无法直接获取到assets/res的绝对路径,因为它们根本就没有。

至此,我们的想法破灭了,但是就没有办法了吗?

并不是,我们可以将图片资源在程序中输出到我们想要的目录内,在写绝对路径即可。

你可能感兴趣的:(Android,android,java,apache,apk)