我的代码是这样的:
// ITest.java
interface ITest {
}
// TestA.java
class TestA implements ITest {
}
// TestB.java
class TestB extends TestA implements ITest {
}
// main function
void main() {
TestB testB = new TestB();
Class[] interfaces = testB.getClass().getInterfaces();
// The count is 0 when gradle version is 7.x
int count = interfaces.length();
}
// build.gradle
android {
buildTypes {
debug {
minifyEnabled true
}
}
}
字符串
如果gradle版本为7.x,则interfaces.length()
为0。例如:
Gradle version -> 7.6.3
Android Gradle plugin -> 7.4.2
型
如果gradle版本为6.x,则interfaces.length()
为1。例如:
Gradle version -> 6.5.1
Android Gradle plugin -> 4.1.2
型
如果gradle版本为7.x,minifyEnabled false
,则interfaces.length()
为1。例如:
Gradle version -> 7.6.3
Android Gradle plugin -> 7.4.2
android {
buildTypes {
debug {
minifyEnabled false
}
}
}
型
我必须升级gradle版本到7.x在我的android项目和minifyEnabled true
所以,我怎么能解决这个问题?我希望interfaces.length()
不是0。
2条答案
按热度按时间lp0sw83n1#
将以下ProGuard规则添加到
proguard-rules.pro
文件中:字符串
将
your.package.name
替换为ITest
所在的实际软件包名称。此规则指示ProGuard保留指定的接口,并防止其在缩小过程中被删除。添加此规则后,在启用缩小的情况下重新构建项目,
interfaces.length()
应该返回预期值。holgip5t2#
我想可能是因为TestA和TestB都实现了ITest,但是TestB继承了TestA,间接实现了ITest。Gradle在编译时对其进行了优化,去掉了TestB直接实现的ITest接口。但是如何避免这种优化呢?