android应用程序安装位置分析

一、需求描述

针对应用程序安装,各产品存在如下疑问:

1. 同一个手机,为什么恢复出厂设置后,在Settings->application中没有preferred Install Location的选项,但是在运行某一个apk(如packageInstaller)之后,在Settings->application中出现了preferred Install Location?

2. 不同apk,同一手机,为什么有的apk安装在SD卡上,有的apk安装在手机内?

3. 同一个apk,为什么有的产品安装在SD卡上,有的产品存在手机内?

4. 同一个apk,同一个手机,为什么有的时候安装在SD卡上,有的时候安装在手机内?

答案:以上现象在Froyo和Gingerbread上都是正常的,我们目前是follow的google原始设计,没有做过修改。原因详见代码分析。

二、分析

1、Settings中的安装位置

通过查看Froyo、Gingerbread版本的文件applicationSettings.java。发现在代码中定义了安装位置的设置功能,但是通过开关默认是关闭的(即默认不显示安装位置的设置菜单),可以通过设置Settings.Secure.SET_INSTALL_LOCATION 为1打开,打开后用户就可以改变应用程序安装的优选位置了。

在hw_default.xml中配置

settings.system.set_install_location

代码片段如下:

// Is app default install location set?

boolean userSetInstLocation = (Settings.System.getInt(getContentResolver(),

Settings.Secure.SET_INSTALL_LOCATION, 0) != 0);

if (!userSetInstLocation) {

getPreferenceScreen().removePreference(mInstallLocation);

else {

mInstallLocation.setValue(getAppInstallLocation());

mInstallLocation.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

public boolean onPreferenceChange(Preference preference, Object newValue) {

String value = (String) newValue;

handleUpdateAppInstallLocation(value);

return false;

}

});

}

如图为默认用户可设置的配置:

public static final String DEFAULT_INSTALL_LOCATION = "default_install_location";

在hw_default.xml中配置

Settings.secure.default_install_location

应用程序安装位置分析应用程序安装位置分析



2、不同apk,同一手机,为什么有的apk安装在SD卡上,有的apk安装在手机内

在Android 2.2中新的特性可以支持类似APP2SD卡上,我们的APK文件可以安装在SD卡上供用户使用

1. 首先让你的程序支持SD卡上安装必须具备设置API Level至少为8,即androidmanifest.xml的中android:minSdkVersion至少为8这样你的APK最终运行时兼容的固件只有2.2了,同时在androidmanifest.xml文件的根节点中必须加入android:installLocation这个属性,类似代码如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

android:installLocation="preferExternal"

... >

2. android:installLocation的值主要有preferExternal、auto和internalOnly这三个选项,通常我们设置为preferExternal可以优先推荐应用安装到SD卡上,当然最终用户可以选择为内部的ROM存储上,如果外部存储已满,Android内部也会安装到内部存储上,auto将会根据存储空间自适应,当然还有一些应用可能会有特殊的目的,他们一般必须安装在内部存储才能可靠运行,设置为internalOnly比较合适,主要体现在:

Services 服务

Your running Service will be killed and will not be restarted when external storage is remounted. You can, however, register for the ACTION_EXTERNAL_APPLICATIONS_AVAILABLE broadcast Intent, which will notify your application when applications installed on external storage have become available to the system again. At which time, you can restart your Service. Android123提示大家一般实时后台监控类的应用都应该装到内部存储,比较可靠。

Alarm Services 闹铃提醒服务

Your alarms registered with AlarmManager will be cancelled. You must manually re-register any alarms when external storage is remounted.

Input Method Engines 输入法引擎

Your IME will be replaced by the default IME. When external storage is remounted, the user can open system settings to enable your IME again.

Live Wallpapers 活动壁纸

Your running Live Wallpaper will be replaced by the default Live Wallpaper. When external storage is remounted, the user can select your Live Wallpaper again.

Live Folders 活动文件夹

Your Live Folder will be removed from the home screen. When external storage is remounted, the user can add your Live Folder to the home screen again.

App Widgets Widget

Your App Widget will be removed from the home screen. When external storage is remounted, your App Widget will not be available for the user to select until the system resets the home application (usually not until a system reboot).

Account Managers 账户管理

Your accounts created with AccountManager will disappear until external storage is remounted.

Sync Adapters 同步适配器

Your AbstractThreadedSyncAdapter and all its sync functionality will not work until external storage is remounted.

Device Administrators 设备管理器

Your DeviceAdminReceiver and all its admin capabilities will be disabled, which can have unforeseeable consequences for the device functionality, which may persist after external storage is remounted.

那么哪些应用适合安装在SD卡中呢? Android开发网建议一些占用资源比较大的游戏,比如大于3MB的单个文件,不需要长期驻留内存的应用,不具备提醒和实时监控的应用一般放到SD卡上比较合适,不过目前想让你的应用装到SD卡上,必须设置API Level至少为8以上,同时显示注明android:installLocation。在Android 2.2中新的特性可以支持类似APP2SD卡上,我们的APK文件可以安装在SD卡上供用户使用

3、同一个apk,为什么有的产品安装在SD卡上,有的产品存在手机内

这往往是因为apk中设置为auto,

有的产品默认在首选设置为“可卸载的SD卡”,当SD卡空间足够时,就会安装在SD卡上,如果SD卡空间不足时,会安装在手机内。

有的产品默认设为“设备内部存储”;只能装到设备内部了。

4、同一个apk,同一个手机,为什么有的时候安装在SD卡上,有的时候安装在手机内

这往往是因为apk中设置为preferExternal、auto,那么在首选设置为“可卸载的SD卡”或“由系统决定”时,SD卡空间足够时,就会安装在SD卡上,如果SD卡空间不足时,会安装在手机内。

现在又有个疑问了,如果apk设置和系统设置有冲突时如何取舍呢?

此处需要后续调试验证。

从Android系统2.2开始,允许应用程序安装在sdcard上。

应用程序APK

每个Apk的应用程序可以独立的设置该应用程序的安装目录

在应用程序的androidmanifest.xml文件的根节点中必须加入android:installLocation这个属性,类似代码如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android "
android:installLocation ="preferExternal"
... >

android:installLocation 的值主要有preferExternal、auto 和internalOnly这三个选项,通常我们设置为preferExternal可以优先推荐应用安装到SD卡上,当然最终用户可以选择为内部的 ROM存储上,如果外部存储已满,Android内部也会安装到内部存储上,auto将会根据存储空间自适应,当然还有一些应用可能会有特殊的目的,他们一般必须安装在内部存储才能可靠运行,设置为internalOnly比较合适,

在S8600和U8600上,我们在Setting --->Application

增加了一个首选安装位置的选项,在这里可以选择设备内部存储、可卸载sd卡,由系统决定等三个选项。。

现在发现有些apk在安装的时候,Setting --->Application-->首选安装位置, 选择的是优先安装在可卸载sd卡上,可是却安装在

系统中了,并且这些安装在系统中的应用,可以移动到sdacard上。

经过测试的结果如下:

应用程序APK

系统的Application Settings

安装后结果

installLocation参数

可卸载sd卡

可卸载sd卡,可以移动

installLocation参数

设备内部存储

设备内部存储,不可以移动

installLocation参数

由系统决定

设备内部存储,不可以移动

auto

可卸载sd卡

设备内部存储,可以移动

auto

设备内部存储

设备内部存储,可以移动

auto

由系统决定

设备内部存储,可以移动

internalOnly

设备内部存储

设备内部存储,不可以移动

internalOnly

可卸载sd卡

设备内部存储,不可以移动

preferExternal

可卸载sd卡/设备内部存储

可卸载sd卡,可以移动

目前经过测试发现,在apk中如果声明为Auto,Setting --->Application-->首选安装位置, 选择可卸载sd卡

这样的应用程序最后被安装在 设备内部存储 中了,并且可以移动到sdcard上。

目前大多数应用都声明了auto,这样会造成很多应用程序在安装的时候无法安装到sdcard,而是直接安装到了系统中,只能通过移动至sdcard

才能把这些apk安装在sdcard上,我们手机的系统空间本来就不够,这样Auto的也无法直接安装到sdcard上。

四、结论

通过代码的分析,发现我们没有修改google原始设计,以上现象都是正常的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Android应用安全实战:Frida协议分析》是一本介绍Frida工具的使用和Android应用安全分析的书籍。Frida是一个强大的动态分析工具,可以帮助开发人员和安全研究人员对应用进行动态分析。本书以Frida为基础,介绍了如何对一些常见的安全问题进行定位和修复。 本书主要分为三部分,第一部分介绍了Frida工具的安装和使用方法,包括如何在Windows、Mac和Ubuntu三个系统上安装Frida,以及如何使用Frida对应用进行动态分析和漏洞挖掘。第二部分介绍了一些常见的安全问题,如反调试、class tampering、hook、rpc等问题,并详细介绍了如何通过Frida对这些问题进行分析和修复。第三部分介绍了一些应用案例分析,以及如何通过Frida对应用中的加密算法、网络协议、第三方代码等进行分析。 本书的特点在于实战性强,作者通过大量的实例和案例,让读者能够更加深入地理解Frida工具的使用方法,并能够将所学知识应用到实际的项目中。同时,本书还提供了一些工具和脚本,方便读者能够更加快速地进行分析和修复工作。 总的来说,本书是一本对于安卓开发人员、移动安全研究人员和安全工程师来说非常有价值的工具书,无论是对于入门和提高都有很大的帮助。Frida工具的特点在于动态分析,能够帮助开发人员和安全工程师快速定位和修复常见的安全问题。而本书则是一个详细的实例教程,通过这份教程的学习,读者将能够掌握Frida工具的使用方法,并能够熟练地应用到实际的项目中。 ### 回答2: 《Android应用安全实战:Frida协议分析PDF》是一本针对移动应用安全的实战指南。这本书主要讲述了如何借助Frida这个强大的工具来进行移动应用的安全分析和漏洞挖掘。 Frida是一款可用于对移动应用进行实时动态分析的工具,它的优点在于可以轻松地hook任意函数和类,还可以在不用重新编译应用程序的情况下动态修改应用程序的行为。Frida的这些特性使得它成为了许多黑客和渗透测试人员使用的首选工具之一。 在《Android应用安全实战:Frida协议分析PDF》中,作者首先介绍了Frida工具的基本原理和使用方法,包括安装和配置Frida、使用Frida脚本、使用Frida进行hook等。接着,作者详细介绍了Android应用程序的各个组成部分和重要的安全机制,并给出了许多实例来演示如何通过Frida来绕过这些安全机制。 最后,作者还介绍了一些常用的Frida脚本和工具,比如Hooking SSLPinning脚本、Frida-Extract工具、在Android 8.0上使用Frida等。这些工具和脚本可以帮助读者更快更高效地进行移动应用的安全分析和漏洞挖掘。 总的来说,《Android应用安全实战:Frida协议分析PDF》是一本非常实用的书籍,对于渗透测试人员、黑客和移动应用开发人员来说都具有一定的参考价值。通过学习和掌握Frida这个工具,可以让我们更好地发现和修复移动应用程序中的安全问题,从而提升我们的移动应用程序的安全性和可靠性。 ### 回答3: 《Android应用安全实战:Frida协议分析》是一本关于安卓应用安全的实战教程。该书的重点在于介绍如何使用Frida协议进行应用程序的逆向分析,得出应用程序的安全漏洞,并给出相应的解决方案。 Frida是一个能够在运行时动态注入JavaScript并调试代码的工具。这也意味着Frida能够直接访问运行在内存中的应用程序。这个优势使Frida成为了一个强大的安卓应用程序分析和调试工具。通过使用Frida,用户可以对应用程序进行监视、修改、甚至是攻击。 《Android应用安全实战:Frida协议分析》详细介绍了Frida的使用方法,包括Frida的架构、基本操作、配置和调试应用程序等。此外,该书还介绍了有关安卓应用程序逆向工程和安全审计的实操技能。通过本书的学习,在安卓应用程序的开发过程中,读者可以掌握一定的安全知识和技能,从而提高应用程序的安全性,避免攻击和漏洞的发生。 总之,《Android应用安全实战:Frida协议分析》是一本非常实用、易懂的安卓应用程序安全入门教材。在阅读该书并掌握其中的技能后,用户可以应用这些技能进行应用程序的逆向分析和安全审计,从而达到提高安卓应用程序安全性的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值