Rover12421's Blog

The End.

Android 2.3.3 和 4.1.2 在影响启动 Activity 中的代码区别

        标题很大,我也做一回标题党吧.

        在弄apk拉起的时候,发现2.3.3正常,到4.1.2就不行了,用Eclipse Debug跟踪了下,发现这两个版本差别真的很大.这里只简单的说下对APK拉起有影响的代码.

        Andorid 4.1.2PathClassLoadDexClassLoad 都是继承于 BaseClassLoad , 并且 PathClassLoadDexClassLoad 内容没啥差别, 其所有功能都在 BaseClassLoad 里实现了, 保留这两个类应该是要向下兼容.在 Android 2.3.3 中, 没有 BaseClassLoad
PathClassLoadDexClassLoad 都是直接继承于 ClassLoad .而且实现差异很大.其中用于存储 lib 目录的名字和结构都是不一样的.
        在Android 4.1.2 中 DexClassLoad 实例化的时候, 其中有一个参数是 optimizedDirectory , 实际是解压出 dex 文件所放的目录, 在 4.1.2 中, 是不能把 optimizedDirectory 指向SD卡中的,否则回抛出安全异常"Optimized data directory /mnt/sdcard is not owed by the current user. Shared storage cannot protect your application from code injection attacks.".
        在 Android 4.1.2 中调用 Activity 中的 OnCreate 方法会触发 FragmentManager 中的一系列动作,并直接影响到了 Activity 中的 mActivityInfo 成员. 而在 Android 2.3.3 中是没有和 Fragment 相关的类, 从这里可以看出, 4.1.2 在显示 Activity 方面做很大的改动.

Comments