如何找到apk所在的路径

如何找到apk所在的路径,第1张

大前提:Android程序其实就是os的插件

插件框架实现思路及原理

一、技术可行性

a) apk的安装处理流程

i apk会copy到/data/app;

ii 解压apk中的classdex,并对其进行优化,获得odex(即JIT)。最后保存到/data/dalvik_cache;

iii 还有一些权限和包信息,会缓存到/data/system中的packageslist和packagesxml中。

b) 在Android上,对apk包的加载逻辑

i 加载逻辑

Zygote(孵化器)在成功启动一Android进程后,会根据packageslist的内容(启动时会加载到system_process中的pakcagemanager中),把odex文件,加载到dalvik中,完成逻辑的加载;

ii 资源读取

资源读取,主要有两三个类,分别是Resource、AssertManager和LayoutInflater。

当在显示界面时,就通过这三个类读取资源。

c) 结论和猜想

i

apk相对于整个android系统而言,其本身就是一种插件形式体现。根据上面关于逻辑和资源的读取概述,完全是可以静默实现的。其次,classdex并没有包含Android

SDK的代码,只是保留对Android SDK接口的调用。 可以这样想象,Android SDK即插件框架,而Android

OS即为整个插件的宿主环境。因此这就可以解释了,为什么在1x编译的代码,在2x甚至3x都可以运行,因为只要插件宿主的接口(即Android

SDK)不变,插件运行时所调用的接口都可以被找到。

ii

为了减少内存占用,Resource、AssertManager和LayoutInflater必然不会把apk中的所有资源都加载进来,而是用时才加载并缓存,而且还有一些的处理机制(如最不常用清除等)。因此这些类当中,必然存在一个指明资源路径的字段或者结构。

iii 要保证兼容性,插件框架公开给插件的接口,必须遵守Open-Close(开发-封闭)原则。另外,一些已经废弃掉接口,同样需要保留。比如Service中的setForeground和JDK的中关于Thread的一些接口等。

iv 可以尝试通过反射,修改Resource、AssertManager和LayoutInflater中指明资源路径的字段;另外,还可以查看源码,查找设置资源路径的方法。

1

JDK下载地址

JDK(JavaDevelopmentKit)是整个Java的核心,包括一系列Java开发的东西,安装完毕需要配置一下环境变量。

2

JAVA_HOME

JDK的安装路径,这个环境变量本身不存在,需要创建,创建完则可以利用%JAVA_HOME%作为统一引用路径,其值为:jdk在你电脑上的安装路径。

3

PATH

PATH属性已存在,可直接编辑。作用是用于配置路径,简化命令的输入,其值为:%JAVA_HOME%\bin。

4

CLASSPATH

用于编译时JAVA类的路径,注意这里设置的是两个值,(;)表示的是JVM先搜索当前目录。其值为:;%JAVA_HOME%\lib\toolsjar。

5

配置完毕后,通过cmd运行以下命令:java-version,javac如果出现返回信息,则设置成功。

在安卓中运行加载第三方so文件的路径不对,可能是由于以下几个原因:

1、没有正确配置Androidmk文件,导致编译器无法正确识别so文件的路径。

2、so文件的路径不正确,没有放在Android系统指定的路径下,或者放在了不正确的路径下。

3、so文件的版本不正确,比如so文件是32位的,而Android系统是64位的,或者反之亦然。

4、so文件的编译模式不正确,比如so文件是使用arm架构编译的,而Android系统是使用x86架构编译的,或者反之亦然。

5、so文件的编译器版本不正确,比如so文件是使用gcc 49编译的,而Android系统是使用gcc 47编译的,或者反之亦然。

以上就是关于如何找到apk所在的路径全部的内容,包括:如何找到apk所在的路径、如何建立Android系统app开发环境(安卓app开发环境搭建和配置)、安卓运行加载第三方so路径不对等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9620080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存