大前提: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中指明资源路径的字段;另外,还可以查看源码,查找设置资源路径的方法。
android手机安装的软件在SD卡上无法找到的。但是android手机本身就会对apk做备份处理,也就是说只要手机上装的应用,都可以在手机上找出来
查找方式:
用户安装的第三方应用,apk文件保存在 /data/app 目录下
系统自带的应用,apk文件保存在 /system/app 目录下
android手机本身是无法查看的,需要连接到电脑上才能查看
android 手机是linux内核,/data /system目录都是属于 root用户才能查看的,因此你需要先获取root权限才能查看
手机上下载 的apk文件一般是在Downloads中,当然,这个下载路径是可以设定的。
APK
是AndroidPackage的缩写,即Android安装包(apk)。
简介:
文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是DalvikVM executes的简称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别。
文件结构
1 META-INF\ (注:Jar文件中常可以看到);
2 res\ (注:存放资源文件的目录) ;
3 AndroidManifestxml (注:程序全局配置文件) ;
4 classesdex (注:Dalvik字节码);
5 resourcesarsc (注:编译后的二进制资源文件)。
有的程序的文件夹是自动建立在sd卡上的,有的程序是没有文件夹的,程序位于date/app文件夹内,而系统的程序位于system/app文件夹内。
软件安装完成后,就会在date/app目录出现一个apk文件。
这个文件相当于windows下exe安装完成后在c盘生成的安装文件夹里的一样,只不过安卓环境下只是一个apk文件(有的还另外会在sd卡自动建立一个用于该程序存放数据的文件夹)
而windows环境下是一个包含有exe启动文件的文件夹,你不能把apk从那个目录删除,就像你把c盘的某个安装路径文件夹里的exe文件删除一样,你就不能启动该程序了,另外,system/app里放的是系统自带的程序,就像是windows自带的office程序类似。
注意apk文件总是相当于电脑里的setup安装文件,所以你不能把apk文件再在date/app里打开,因为它已经安装完毕了,所以提示是否替换。
扩展资料:
安装帮助
一错误解决
1提示:文件受损
说明:安装程序文件被破坏或者不完整有可能是在程序下载或者解压缩时引起的文件破坏
解决:请确定下载的程序文件完整性网络不好也会损坏下载文件,建议再次下载或解压缩程序再试
2提示:无任何提示,运行无反映
说明:一般是中文文件名的JAR程序出现这种情况
解决:删除掉已经安装的JAR程序,将JAR程序文件名改为全英文之后再试
3提示:手机启动失败,请与零售商联系
说明:一般是某个程序安装失败后重启手机时出现这个提示,也有部分是升级机器时失败导致
解决:如果是某个程序安装失败,那么只需要将存储卡拿出来,然后再次启动机器并将安装错误的程序删除掉即可如果是手机升级后出现,那么就只有重新格机了需要注意的是:一些开机启动并常驻内存的软件是无法通过格式化解决的所以,软格前先需要把这些软件全部关闭或删除
4问题:jar程序安装打不开
说明:特别注意,JAR程序下载后不能改中文名再安装,否则会打不开,只能起英文名和数字!
解决:删除已安装程序,再把安装包重命名为英文或数字重新安装
5问题:打开程序时提示运存或储存空间不足!
说明:正在运行的程序太多或开机太久
解决:可以关闭一些程序或重起手机再打开程序,或查看手机储存是否太小,可以移动一些自己的文件到卡里增加手机空间!
6问题:下载程序分辨率不合适该屏幕
说明:1资源分类出错
2资源本身支持问题
解决:重新设置机型下载
7问题:在运行中提示出错
说明:1资源本身的BUG
2手机平台支持问题
3运行内存不足
解决:可以找一个高版本或重新开机再试试
参考资料:
以上就是关于如何找到apk所在的路径全部的内容,包括:如何找到apk所在的路径、如何获取android手机上已安装软件的下载位置或来源、APK文件放在手机里的哪个文件夹里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)