[英]Android Studio (3.2.1) Instant Run doesn't work with Jacoco 0.8.2?
[英]Java Reflections doesn't work with Android instant run
我正在编写一些使用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.*
的包内的类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的意识形态引起的,它取代了修改过的类。
也许我的回答对你有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.