Proguard正在删除android库中覆盖的资源id
我有一个带有LegendActivity的库,它使用layout legend.xml引用id为“icons”的视图。现在,在我的应用程序中,我用“AppLegendActivity”将此活动子类化,并使用应用程序的覆盖legend.xml,其中不包括任何id为“icons”的视图 图书馆Proguard正在删除android库中覆盖的资源id,android,android-gradle-plugin,proguard,android-resources,android-proguard,Android,Android Gradle Plugin,Proguard,Android Resources,Android Proguard,我有一个带有LegendActivity的库,它使用layout legend.xml引用id为“icons”的视图。现在,在我的应用程序中,我用“AppLegendActivity”将此活动子类化,并使用应用程序的覆盖legend.xml,其中不包括任何id为“icons”的视图 图书馆 public class LegendActivity extends Activity { @Override public void onCreate(Bundle b) {
public class LegendActivity extends Activity {
@Override
public void onCreate(Bundle b) {
setContentView(R.layout.legend);
View icons_view = findViewById(R.id.icons);
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/icons"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
如果我在proguard中添加“-dontwarn”标志,我可以让应用程序编译,但一旦AppLegendActivity调用super.onCreate,就会调用对R.id.icons的引用,应用程序就会崩溃,原因是:
ava.lang.NoSuchFieldError: com.example.r.icons
应用程序的build.grade引用proguard部分:
buildTypes {
release {
// Proguard
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
我的proguard-rules.pro
-dontwarn com.example.**
是否可以重新分解此代码以避免此崩溃?对我可以简单地重命名一些资源文件并消除冲突吗?当然但在实际的项目中,这要复杂得多,我不知道这种重构的含义有多大。有没有办法让库的R文件不删除/混淆应用程序覆盖资源后不再可见的ID?在
AppLegendActivity
类中,您覆盖LegendActivity
您需要更改setContentView(R.layout…)代码>或删除super.onCreate(Bundle b)代码>是的,这是我提到的我不想做的重构。实际代码本身要复杂得多,因为这是一个库,由多个应用程序使用;这可能会产生意想不到的后果,我甚至还不知道。考虑到当前的代码,我正在寻找一种不使用proguard的方法,使其能够使用proguard加上一些配置。
buildTypes {
release {
// Proguard
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
-dontwarn com.example.**