gpt4 book ai didi

android - Java Reflections 不适用于 Android 即时运行

转载 作者:太空狗 更新时间:2023-10-29 14:48:20 24 4
gpt4 key购买 nike

我正在编写一些使用 Java 反射的代码。我正在使用这种方法扫描我的包中的某个类:

/**
* Called to get list of classes included in the current project
*
* @param packageName the name of application package
* @return array of classes' names
*/
private String[] getClassesOfPackage(String packageName) {
ArrayList<String> classes = new ArrayList<>();
try {
String packageCodePath = getPackageCodePath();
DexFile df = new DexFile(packageCodePath);
for (Enumeration<String> iter = df.entries(); iter.hasMoreElements(); ) {
String className = iter.nextElement();
if (className.contains(packageName)) {
classes.add(className);
}
}
} catch (IOException e) {
e.printStackTrace();
}

return classes.toArray(new String[classes.size()]);
}

最近我将我的 Gradle 版本升级到 2.1.0 以尝试即时运行功能,但我注意到我的应用程序包通常返回空 String[] 从这个方法和这个方法只返回包内的类名称为 com.android.tools.fd.*

为什么我在我的应用程序包中看不到类?!

最佳答案

如果您在 Instant Run 部署和简单安装后看到“packageCodePath”值,您会发现该值有所不同。

例如,在我的项目中,我看到了这样的东西:

Instant run: /data/app/com.app-1/base.apk
Not instant run: /data/app/com.app-1.apk

之后,我在 DexFile 实例中观察了 mNameList,我很惊讶它在这两种模式中的不同!在即时运行模式下我只看了大约 30 节课,而不是即时运行模式。

我不知道该过程的深层细节,但我认为这是由替换修改类的 Instant Run 意识形态引起的。

也许我的回答对你有用。

关于android - Java Reflections 不适用于 Android 即时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37581332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com