android class.getInterfaces() 返回空

问题描述 投票:0回答:1

我的代码是这样的:

// 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
      }
  }

}

我必须在我的android项目中将gradle版本升级到7.x并且

minifyEnabled true
所以,我该如何解决这个问题???我预计
interfaces.length()
不是 0。

java android gradle android-gradle-plugin
1个回答
0
投票

将以下 ProGuard 规则添加到您的

proguard-rules.pro
文件中:

# Keep the ITest interface
-keep interface your.package.name.ITest

your.package.name
替换为
ITest
所在的实际包名。该规则指示 ProGuard 保留指定的接口并防止其在缩小过程中被删除。

添加此规则后,在启用缩小的情况下重建项目,

interfaces.length()
应返回预期值。

© www.soinside.com 2019 - 2024. All rights reserved.