*** is not owned by the current user. Shared storage cannot protect your application from code injection attacks.
起因由于上面Log中的一段Exception
发现这个问题源于动态加载APK中的函数和资源,在4.1之前的Android系统,均能正常使用,发现升级到4.1之后会有这个Exception报出;
所谓动态加载,就是手机本地有一个APK包,用户不需要执行安装过程,程序就可以解包并运行APK中的函数和调取资源。很多场景会用到,比如一些游戏组件,插件,皮肤等等;
动态加载其中一个过程就是将APK解包,即将class.dex从APK中解压出来,这样才能通过java的反射调用到其中的方法。
解包过程中一定会调用这个方法
01
02
03
04
05
06
07
08
09
10
11
12
|
static public DexFile loadDex(String sourcePathName, String outputPathName,
int flags) throws IOException {
/* * TODO: we may want to cache previously-opened DexFile objects.
* The cache would be synchronized with close(). This would help
* us avoid mapping the same DEX more than once when an app
* decided to open it multiple times. In practice this may not
* be a real issue.
*/
return new DexFile(sourcePathName, outputPathName, flags);
}
|
问题就出现在这里,查看4.1的源码,发现Google基于安全考虑在DexFile这个函数中增加了一个验证文件归属权的步骤。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
private DexFile(String sourceName, String outputName, int flags) throws IOException {
if (outputName != null) {
try {
String parent = new File(outputName).getParent();
if (Libcore.os.getuid() != Libcore.os.stat(parent).st_uid) { //就是这里
//4.1增加了一个验证目录uid与当前进程uid是否一致的步骤,致使下面的异常被抛出
throw new IllegalArgumentException( "Optimized data directory " + parent
+ " is not owned by the current user. Shared storage cannot protect"
+ " your application from code injection attacks." );
}
} catch (ErrnoException ignored) {
// assume we'll fail with a more contextual error later
}
}
mCookie = openDexFile(sourceName, outputName, flags); mFileName = sourceName;
guard.open( "close" );
//System.out.println("DEX FILE cookie is " + mCookie);
}
|
解决方法,参数outputPathName一定要是运行程序本身的私有地址,通过
01
|
getDir( "dexfile" , 0)
|
方法来获取这个dex文件存储位置就可以解决这个问题。
http://timcho.net/2013/01/16/android_4_1_dong_tai_jia_zai_apk_zhong_de_zi_yuan/
相关推荐
本篇文章将围绕"android4.1 Launcher"这一主题,深入探讨其源码的处理、壁纸设置的修改以及桌面图标和主题功能的增强。 首先,Launcher2是Android 4.1中的默认启动器,它负责显示主屏幕、应用程序抽屉和快捷方式。...
在Android 4.1版本中,SystemUI 的重要性更加突出,因为它不仅提供基础的系统导航功能,还包含状态显示和通知管理,甚至允许设备制造商进行一定程度的自定义,以满足不同用户的个性化需求。 1. 系统UI(SystemUI)...
3. **替换或添加资源**:将从Android 4.1系统中提取的动画文件复制到你的项目中相应的res/anim或res/animator目录,并替换或添加到你的项目资源中。 4. **修改代码**:如果原应用没有使用到这些动画,你需要在代码...
**APK(Android Package Kit)**是Android操作系统的应用程序包格式,包含了应用程序的所有资源文件、代码以及元数据等。**反编译**是指将APK文件中的二进制代码还原成接近原始源代码的过程,便于进行修改和分析。 ...
5. **权限管理**:Android的权限模型在4.x版本中已经相当成熟,源码中包含了权限的声明、检查、动态申请等流程,这对理解和实现安全的Android应用至关重要。 6. **Service管理**:Service是Android中后台运行的服务...
- 访问SMB共享需要在AndroidManifest.xml中添加INTERNET权限:`<uses-permission android:name="android.permission.INTERNET" />` - 用户认证信息应妥善处理,避免明文存储,可以使用Android的Keystore系统加密...
Android应用管理器是Android操作系统中不可或缺的一部分,它允许用户方便地管理设备上的应用程序,包括安装、卸载、备份、更新等操作。本文将深入探讨一个现代、简便且可定制的Android应用管理器,尤其是强调其root...
- **RecyclerView**:用于展示文件列表,支持动态加载和滚动优化。 - **Adapter模式**:适配器模式在文件管理器中用于连接数据源(如文件列表)和视图组件(如RecyclerView)。 4. **多选和操作**: - **选择...
本话题将详细介绍如何在Android系统中抓取所有APK的错误log,并通过电子邮件发送给技术团队,实现快速的问题诊断。 首先,我们需要了解Android的日志系统。在Android中,日志系统是一个关键的组件,它允许应用程序...
在Android操作系统中,SD卡作为扩展存储空间,常常存储着大量的用户数据,包括照片、音乐、文档等。为了方便用户管理和访问这些文件,Android SD卡文件浏览器应运而生。本文将深入探讨这一主题,包括其工作原理、...
adb(Android Debug Bridge)是Android开发中的一个关键工具,它是一个命令行实用程序,允许开发者通过USB或网络连接与Android设备进行通信。在本压缩包"adb_1.0.4.1.zip"中,包含了四个核心文件,它们是AdbWinApi....
"battery-historian" 是一个专门用于分析Android设备电池历史数据的工具,它是由Google开发并维护的。这个工具能够帮助开发者、系统管理员以及普通用户深入理解设备电池的使用情况,找出可能导致电池耗电过快或者...
例如,它可能增加了对Android 4.0(API级别15)至Android 4.1(API级别16)特性的支持和开发工具。 3. **布局编辑器增强**:此版本可能改善了图形布局编辑器,使开发者能够更直观地设计用户界面,添加新的组件,并...
通常,一个Android应用包(APK)文件会包含所有必要的代码、资源和配置,以便在Android设备上运行。在这个例子中,"Stock"可能是APK文件的名称,用户只需下载并安装此文件,即可在HTC G14或G18上启用股票插件功能。 ...
**Android SDK全方位解析** Android SDK(Software ...通过深入学习和使用"android_sdk.zip_android"中的资源,开发者可以全面掌握Android 4.1开发的基本技能,从而创造出高效、稳定且用户体验优秀的应用程序。
文档中的“安卓手机 apk 编制实操(II)”部分提到了如何在 Android Studio 中处理数据,特别是关于数据库的操作。 #### 2.1 读取数据库并转存为本地文件 - 在 Android 应用中,常常需要从服务器或其他数据库中读取...
书名:《Android编程入门很简单》(清华大学出版社....第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人助手 第14章个人轨迹跟踪器
在使用Android设备的过程中,用户可能会遇到一种情况:通过Android系统的默认浏览器访问网页并尝试下载某些文件时,发现这些文件无法正常下载。这一问题的根本原因在于Android默认浏览器及内置的Download Manager在...
在本话题中,我们将深入探讨Gradle 4.0.1和4.1这两个版本,以及它们在Android Studio 3.0.1中的应用。 1. **Gradle 4.0.1** - **主要改进**: Gradle 4.0.1是4.0系列的一个小更新,主要关注性能优化和稳定性增强。...
书名:《Android编程入门很简单》(清华大学出版社....第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人助手 第14章个人轨迹跟踪器