`
zhouxiaoli521
  • 浏览: 553264 次
  • 性别: 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/

分享到:
评论

相关推荐

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

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

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

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

    Android开发应用实战详解源代码

    4.20 加载手机存储卡中的文件 4.21 小结 第5章 交互式服务 5.1 textview的花样 5.2 拨打电话程序 5.3 短信发送程序 5.4 e-mail发送程序 5.5 实现手机震动效果 5.6 图文提醒效果 5.7 状态栏提醒 5.8 检索通讯录 5.8.1...

    Android 4游戏编程入门经典

     4.1 定义一个android应用程序:清单文件  4.1.1 [manifest]元素  4.1.2 [application]元素  4.1.3 [activity]元素  4.1.4 [uses-permission]元素  4.1.5 [uses-feature]元素  4.1.6 [uses-sdk]元素  4.1.7 ...

    《Google Android SDK开发范例大全(第3版)》.pdf

    4.9 动态添加/删除的spinner菜单 102 4.10 心爱小宝贝相片集 104 4.11 快速地搜索手机文件引擎 107 4.12 按钮也能随单击变换 109 4.13 具自动提示功能的菜单 110 4.14 数字及模拟小时钟设计 112 ...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    13.3 Android的动态加载技术 463 13.4 反编译初步 469 13.4.1 使用dex2jar和jd-gui反编译apk 470 13.4.2 使用apktool对apk进行二次打包 470 第14章 JNI和NDK编程 473 14.1 JNI的开发流程 474 14.2 NDK的开发...

    Google Android SDK开发范例大全(第3版) 1/5

    4.9 动态添加/删除的Spinner菜单 4.10 心爱小宝贝相片集 4.11 快速地搜索手机文件引擎 4.12 按钮也能随单击变换 4.13 具自动提示功能的菜单 4.14 数字及模拟小时钟设计 4.15 动态输入日期与时间 4.16 猜猜红桃A在...

    Google Android SDK开发范例大全(第3版) 4/5

    4.9 动态添加/删除的Spinner菜单 4.10 心爱小宝贝相片集 4.11 快速地搜索手机文件引擎 4.12 按钮也能随单击变换 4.13 具自动提示功能的菜单 4.14 数字及模拟小时钟设计 4.15 动态输入日期与时间 4.16 猜猜红桃A在...

    Google Android SDK开发范例大全(第3版) 3/5

    4.9 动态添加/删除的Spinner菜单 4.10 心爱小宝贝相片集 4.11 快速地搜索手机文件引擎 4.12 按钮也能随单击变换 4.13 具自动提示功能的菜单 4.14 数字及模拟小时钟设计 4.15 动态输入日期与时间 4.16 猜猜红桃A在...

    Google Android SDK开发范例大全(第3版) 5/5

    4.9 动态添加/删除的Spinner菜单 4.10 心爱小宝贝相片集 4.11 快速地搜索手机文件引擎 4.12 按钮也能随单击变换 4.13 具自动提示功能的菜单 4.14 数字及模拟小时钟设计 4.15 动态输入日期与时间 4.16 猜猜红桃A在...

    Google Android SDK开发范例大全(第3版)part2

     4.9 动态添加/删除的Spinner菜单  4.10 心爱小宝贝相片集  4.11 快速地搜索手机文件引擎  4.12 按钮也能随单击变换  4.13 具自动提示功能的菜单  4.14 数字及模拟小时钟设计  4.15 动态输入日期与时间...

    精通ANDROID 3(中文版)1/2

    4.1 探索Android内置的ContentProvider  4.2 ContentProvider的架构  4.3 实现ContentProvider  4.4 练习图书提供程序  4.4.1 添加图书  4.4.2 删除图书  4.4.3 获取图书数量  4.4.4 显示图书列表  ...

    Android开发艺术探索

    13.3 Android的动态加载技术 / 463 13.4 反编译初步 / 469 13.4.1 使用dex2jar和jd—gui反编译apk / 470 13.4.2 使用apktool对apk进行二次打包 / 470 第14章 JNI和NDK编程 / 473 14.1 JNI的开发流程 / ...

    android开发艺术探索高清完整版PDF

    / 441 12.3.2 优化列表的卡顿现象 / 446 第13章 综合技术 / 448 13.1 使用Crash Handler来获取应用的crash信息 / 449 13.2 使用multidex来解决方法数越界 / 455 13.3 Android的动态加载技术 / 463 13.4 反编译...

    google android sdk开发范例大全 第二版 PDF 光盘代码

    google android sdk开发范例大全 第二版 PDF 和 随书光盘代码 ISBN:9787115229649 目录 第1章 了解、深入、动手做   1.1 红透半边天的Android  ... A.3 上传*.apk程序到Android Market上 

Global site tag (gtag.js) - Google Analytics