【问题标题】:Android making duplicate .dex files of apk's in dalvik-cacheAndroid 在 dalvik-cache 中制作 apk 的重复 .dex 文件
【发布时间】:2015-02-09 10:59:06
【问题描述】:

我正在开发基于 Android AOSP 4.4.2 的产品,该产品在自定义硬件上运行。我有一个单独的分区 /opt ,我的 apk 存储在 /opt/harsh/app/ 中。我还有一个符号链接/vendor,它指向/opt/harsh(这是设计结构所必需的)。

我面临的问题是在/data/dalvik-cache 中为/opt/harsh/app/*.apk/vendor/app/*.apk 创建了多个.dex 文件,它们是相同的文件,但是这两组.dex 文件具有不同的用户组。因此,我的应用程序无法正常运行。如果我更改为不创建/opt 分区而只创建/vendor 分区而不是符号链接并将apk 放入其中,一切正常。

请帮忙...

【问题讨论】:

  • 它不是创建重复的 DEX 文件,而是为每个 APK 创建一个 DEX 文件。问题是您有多个 APK。你这样做是为了解决什么问题?
  • 是的,我有多个 APK,但理想情况下它不应该扫描 /opt/harsh 目录。我们有在 Android 2.3 上运行的旧设备,它只扫描 /system 和 /vendor 目录。我们正在移植 Android 4.4 并面临这个问题。由于此多个 APK 的问题是某些应用程序因抛出 Unable to instantiate ComponentInfo / Class not found 异常而崩溃。
  • @fadden :这里还值得注意的是,如果我不创建 /vendor 符号链接,那么即使 APK 存在,它也不会为 /opt/harsh/app 目录创建 DEX。但是,如果我创建符号链接,则会为 /vendor/app 和 /opt/harsh/app 都创建 DEX !!

标签: android android-source dalvik


【解决方案1】:

终于我自己解决了这个问题!

libcore/dalvik/src/main/java/dalvik/system/DexFile.java 中有一个错误导致了这个问题。在这个函数中:

private static int openDexFile(String sourceName, String outputName,
    int flags) throws IOException {
    return openDexFileNative(new File(sourceName).getCanonicalPath(),
                             (outputName == null) ? null : new File(outputName).getCanonicalPath(),
                             flags);
}

问题出在new File(sourceName).getCanonicalPath()

将其更改为new File(sourceName).getAbsolutePath() 即可解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2023-03-21
    • 2017-10-24
    • 1970-01-01
    • 2012-11-26
    • 2016-12-13
    相关资源
    最近更新 更多