android系统上,应用程序安装在什么位置呢?
根据经验,大家都会这么说,系统的应用安装在/system/app/ 目录下 以apk和odex两个文件共同表达一个应用程序;
自己安装的软件自然是安装在/data/app目录下,也是以apk形式存在。
好像没有什么问题,但是为什么我安装的好多程序在这两个目录下找不到呢?
因为除了这两个目录 它还可以存在于其他目录,一边理解,一边寻找吧。
1.已经安装到android上的应用程序的存在形式:
首先必须要有apk存在,否则这个程序就等于没有安装,你可以试着把上面提到的system/app下
的文件删除试试,那个程序马上就会从系统中消失;
其次运行过程中,肯定不是apk格式,没错,apk程序是在dalvik虚拟机上运行的(就是一个java虚拟机),很容易想到apk要解包了,
看看/data/dalvik-cache目录,下面就是解压出来的dex文件。
最后 还有一些文件,是存在/data/data目录下的 这里面主要是数据库,lib库等。
2.如何准确找到apk的位置
开发人员一般都想找到apk文件,以为可以反编译,可以获得自己想要的技术点。
1) 打开usb调试模式,把/data/system/packages.xml文件取下来
2)搜索找到你要找的软件,例如,下面这段,直接就看到codePath了
<package name="com.zplus" codePath="/mnt/asec/com.zplus-2/pkg.apk" nativeLibraryPath="/mnt/asec/com.zplus-2/lib" flags="262144" ft="13325271c40" it="133244107eb" ut="1332527411a" version="5" userId="10161">
<sigs count="1">
<cert index="4" key="3082022730820190a00302010202044d74986c300d06092a864886f70d01010505003057310b3009060355040613023836310e300c060355040813056368696e613110300e060355040713076e616e6a696e67310b3009060355040a13026877310b3009060355040b13026e62310c300a060355040313037a68753020170d3131303330373038333334385a180f32303631303232323038333334385a3057310b3009060355040613023836310e300c060355040813056368696e613110300e060355040713076e616e6a696e67310b3009060355040a13026877310b3009060355040b13026e62310c300a060355040313037a687530819f300d06092a864886f70d010101050003818d0030818902818100b816326c12b8a2f06b08d758bbb6b804e4aedeed7411b09f90fb93b664aea406988f14f5b142b3de7da44cb6de775ce7908397d147037baf7a30310c81e89687f27d1f889bf81f049af9f2857f695b10ee747789891b27f9f27594b085eba63c8885d70995c10f9a7319bad9047ab44ad214de4c96fb3d54a162c505e40316070203010001300d06092a864886f70d0101050500038181001eb2acb12420c10ba15391761ac82b02fe18450744a18f0e38c5e22397e1938f6beca53b3b78a684a90679e96fb0c9c80d0aff176fc1581a0f14012fe90f6a44ed5e0aa33af6436cab151f704b3297bbfbe6a913077153eee45f7bcc644c3e95f070e7f4e6fc48b910a5bcf4f1da98f582196b31101b34b790835c020b2ef0e3" />
</sigs>
<perms>
<item name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<item name="android.permission.READ_PHONE_STATE" />
<item name="android.permission.CAMERA" />
<item name="android.permission.SEND_SMS" />
<item name="android.permission.WRITE_EXTERNAL_STORAGE" />
<item name="android.permission.INTERNET" />
<item name="android.permission.ACCESS_FINE_LOCATION" />
<item name="android.permission.ACCESS_COARSE_LOCATION" />
<item name="android.permission.READ_CONTACTS" />
<item name="android.permission.CALL_PHONE" />
<item name="android.permission.ACCESS_MOCK_LOCATION" />
<item name="android.permission.ACCESS_NETWORK_STATE" />
</perms>
</package>
最后说明一点 用adb获取这个文件不需要root权限,(我测试了一款2.2没有root和2.3已经root的 都是ok)
如果大家觉得上面的获取apk方法比较麻烦的话,大家可以使用91助手,里面有个备份已安装软件的功能可以直接把apk导出。
( 刚开始用零散的时间学习android,如有错误还请留言指正 )