`
zhouxiaoli521
  • 浏览: 562708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 4.1 动态加载APK中的资源

 
阅读更多
*** 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.1Launcher

    本篇文章将围绕"android4.1 Launcher"这一主题,深入探讨其源码的处理、壁纸设置的修改以及桌面图标和主题功能的增强。 首先,Launcher2是Android 4.1中的默认启动器,它负责显示主屏幕、应用程序抽屉和快捷方式。...

    Android_4.1 SystemUI分析

    在Android 4.1版本中,SystemUI 的重要性更加突出,因为它不仅提供基础的系统导航功能,还包含状态显示和通知管理,甚至允许设备制造商进行一定程度的自定义,以满足不同用户的个性化需求。 1. 系统UI(SystemUI)...

    安卓4.1特效

    3. **替换或添加资源**:将从Android 4.1系统中提取的动画文件复制到你的项目中相应的res/anim或res/animator目录,并替换或添加到你的项目资源中。 4. **修改代码**:如果原应用没有使用到这些动画,你需要在代码...

    android的apk反编译

    **APK(Android Package Kit)**是Android操作系统的应用程序包格式,包含了应用程序的所有资源文件、代码以及元数据等。**反编译**是指将APK文件中的二进制代码还原成接近原始源代码的过程,便于进行修改和分析。 ...

    android4高级编程源码

    5. **权限管理**:Android的权限模型在4.x版本中已经相当成熟,源码中包含了权限的声明、检查、动态申请等流程,这对理解和实现安全的Android应用至关重要。 6. **Service管理**:Service是Android中后台运行的服务...

    Android smb访问共享文件以及播放共享文件

    - 访问SMB共享需要在AndroidManifest.xml中添加INTERNET权限:`<uses-permission android:name="android.permission.INTERNET" />` - 用户认证信息应妥善处理,避免明文存储,可以使用Android的Keystore系统加密...

    Android-一个现代简便和可定制的Android应用管理器

    Android应用管理器是Android操作系统中不可或缺的一部分,它允许用户方便地管理设备上的应用程序,包括安装、卸载、备份、更新等操作。本文将深入探讨一个现代、简便且可定制的Android应用管理器,尤其是强调其root...

    小米文件管理

    - **RecyclerView**:用于展示文件列表,支持动态加载和滚动优化。 - **Adapter模式**:适配器模式在文件管理器中用于连接数据源(如文件列表)和视图组件(如RecyclerView)。 4. **多选和操作**: - **选择...

    andorid 抓取系统所有apk的错误log

    本话题将详细介绍如何在Android系统中抓取所有APK的错误log,并通过电子邮件发送给技术团队,实现快速的问题诊断。 首先,我们需要了解Android的日志系统。在Android中,日志系统是一个关键的组件,它允许应用程序...

    android SD卡文件浏览器

    在Android操作系统中,SD卡作为扩展存储空间,常常存储着大量的用户数据,包括照片、音乐、文档等。为了方便用户管理和访问这些文件,Android SD卡文件浏览器应运而生。本文将深入探讨这一主题,包括其工作原理、...

    adb_1.0.4.1.zip

    adb(Android Debug Bridge)是Android开发中的一个关键工具,它是一个命令行实用程序,允许开发者通过USB或网络连接与Android设备进行通信。在本压缩包"adb_1.0.4.1.zip"中,包含了四个核心文件,它们是AdbWinApi....

    battery-historian

    "battery-historian" 是一个专门用于分析Android设备电池历史数据的工具,它是由Google开发并维护的。这个工具能够帮助开发者、系统管理员以及普通用户深入理解设备电池的使用情况,找出可能导致电池耗电过快或者...

    android ADT 8.0.0-8.0.1

    例如,它可能增加了对Android 4.0(API级别15)至Android 4.1(API级别16)特性的支持和开发工具。 3. **布局编辑器增强**:此版本可能改善了图形布局编辑器,使开发者能够更直观地设计用户界面,添加新的组件,并...

    G14 G18 sense4.1国行股票插件

    通常,一个Android应用包(APK)文件会包含所有必要的代码、资源和配置,以便在Android设备上运行。在这个例子中,"Stock"可能是APK文件的名称,用户只需下载并安装此文件,即可在HTC G14或G18上启用股票插件功能。 ...

    android_sdk.zip_android

    **Android SDK全方位解析** Android SDK(Software ...通过深入学习和使用"android_sdk.zip_android"中的资源,开发者可以全面掌握Android 4.1开发的基本技能,从而创造出高效、稳定且用户体验优秀的应用程序。

    世界著名音乐大师(apk)播放说明.docx

    文档中的“安卓手机 apk 编制实操(II)”部分提到了如何在 Android Studio 中处理数据,特别是关于数据库的操作。 #### 2.1 读取数据库并转存为本地文件 - 在 Android 应用中,常常需要从服务器或其他数据库中读取...

    Android编程入门很简单.(清华出版.王勇).part1

    书名:《Android编程入门很简单》(清华大学出版社....第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人助手 第14章个人轨迹跟踪器

    解决android默认浏览器不能下载某些文件的方法

    在使用Android设备的过程中,用户可能会遇到一种情况:通过Android系统的默认浏览器访问网页并尝试下载某些文件时,发现这些文件无法正常下载。这一问题的根本原因在于Android默认浏览器及内置的Download Manager在...

    gradle-4.0.1-all及gradle-4.1-all

    在本话题中,我们将深入探讨Gradle 4.0.1和4.1这两个版本,以及它们在Android Studio 3.0.1中的应用。 1. **Gradle 4.0.1** - **主要改进**: Gradle 4.0.1是4.0系列的一个小更新,主要关注性能优化和稳定性增强。...

    Android编程入门很简单.(清华出版.王勇).part2

    书名:《Android编程入门很简单》(清华大学出版社....第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人助手 第14章个人轨迹跟踪器

Global site tag (gtag.js) - Google Analytics