2015-02-09 48 views
0

我正在开发基于Android AOSP 4.4.2的产品,运行在定制硬件上。我有一个单独的分区/opt和我的apk存储在/opt/harsh/app/。我也有一个符号链接/vendor,它指向/opt/harsh(这是根据设计结构要求的)。Android制作apk文件在dalvik-cache中的重复.dex文件

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

请帮忙...

+2

这不造成重复DEX文件,它是创造每个APK一个DEX文件。问题是你有多个APK。你想通过这样做解决什么问题? – fadden 2015-02-16 16:34:40

+0

是的,我有多个APK,但理想情况下它不应该扫描/ opt/harsh目录。我们的旧设备在Android 2.3上运行,它只扫描/ system和/ vendor目录。我们正在移植Android 4.4并面临这个问题。由于这种多个APK的问题是某些应用程序因抛出无法实例化ComponentInfo/Class未找到的异常而崩溃。 – androidFan 2015-02-17 10:46:25

+0

@fadden:另外值得注意的是,如果我不创建/ vendor符号链接,那么即使APK存在,它也不会为/ opt/harsh/app目录创建DEX。但是如果我创建符号链接,那么为/ vendor/app和/ opt/harsh/app都创建DEX! – androidFan 2015-02-18 07:12:25

回答

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()的问题解决

相关问题