Android 在 dalvik 缓存中制作 apk 的重复 .dex 文件
Android making duplicate .dex files of apk's in dalvik-cache
我正在自定义硬件上开发基于 Android AOSP 4.4.2 运行 的产品。我有一个单独的分区 /opt
,我的 apk 存储在 /opt/harsh/app/
中。我还有一个指向 /opt/harsh
的符号链接 /vendor
(这是设计结构所必需的)。
我面临的问题是在 /data/dalvik-cache
中为 /opt/harsh/app/*.apk
和 /vendor/app/*.apk
创建了多个 .dex 文件,它们是相同的文件,但是这两个文件集.dex 文件有不同的用户组。因此,我的应用程序 运行 不正确。如果我更改为不创建 /opt
分区并且仅创建 /vendor
分区而不是符号链接并将 apk 放入其中,则一切正常。
请帮忙...
最后我自己解决了这个问题!
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()
问题已解决
我正在自定义硬件上开发基于 Android AOSP 4.4.2 运行 的产品。我有一个单独的分区 /opt
,我的 apk 存储在 /opt/harsh/app/
中。我还有一个指向 /opt/harsh
的符号链接 /vendor
(这是设计结构所必需的)。
我面临的问题是在 /data/dalvik-cache
中为 /opt/harsh/app/*.apk
和 /vendor/app/*.apk
创建了多个 .dex 文件,它们是相同的文件,但是这两个文件集.dex 文件有不同的用户组。因此,我的应用程序 运行 不正确。如果我更改为不创建 /opt
分区并且仅创建 /vendor
分区而不是符号链接并将 apk 放入其中,则一切正常。
请帮忙...
最后我自己解决了这个问题!
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()
问题已解决