class Landroid/support/v7/preference/R$id 中没有类型 I 的静态字段 list_container
No static field list_container of type I in class Landroid/support/v7/preference/R$id
我将一个 2 年前的项目迁移到 Android Studio(和新库),调用 PreferenceScreen 时遇到很多问题。
java.lang.NoSuchFieldError: No static field list_container of type I in class Landroid/support/v7/preference/R$id; or its superclasses (declaration of 'android.support.v7.preference.R$id' appears in /data/app/com.sh.inv-1/base.apk)
at android.support.v7.preference.PreferenceFragmentCompat.onCreateView(PreferenceFragmentCompat.java:260)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1988)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:754)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1653)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:364)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)
我的 build.gradle 是:
apply plugin: 'com.android.application'
android {
useLibrary 'org.apache.http.legacy'
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.sh.inv"
targetSdkVersion 23
versionCode 66
versionName "2.5.0"
}
buildTypes {
debug {
}
release {
minifyEnabled true
proguardFiles 'proguard-project.txt'
}
}
productFlavors {
dev {
minSdkVersion 21
}
prod {
minSdkVersion 14
}
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
repositories {
maven { url "http://jzaccone.github.io/SlidingMenu-aar" }
}
dependencies {
compile files('libs/ormlite-android-4.48.jar')
compile files('libs/ormlite-core-4.48.jar')
compile 'com.android.support:design:23.2.1'
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:preference-v7:23.2.1'
compile 'com.android.support:preference-v14:23.2.1'
compile "com.android.support:appcompat-v7:23.2.1"
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.google.android.gms:play-services-analytics:8.4.0'
compile 'com.google.android.gms:play-services-identity:8.4.0'
compile 'com.google.android.gms:play-services-drive:8.4.0'
compile 'org.apache.commons:commons-io:+'
compile 'com.cocosw:undobar:1.8.1@aar'
compile project(':afilechooser')
compile project(':simplecropimage')
}
我的片段是:
public class Settings extends android.support.v7.preference.PreferenceFragmentCompat implements
OnSharedPreferenceChangeListener {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.settings2);
我的 AppBaseTheme 是:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
真不懂怎么解决。我试过:
- 删除gradle缓存
- 更改 gradle 版本(2.10 和 2.12)
- 使用-sdk 添加:
< uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" xmlns:tools="http://schemas.android.com/tools" tools:overrideLibrary="android.support.v14.preference"/>
终于找到问题了。我有一个名为 preference_list_fragment.xml 的布局。删除文件后有效
只要一个应用程序在两个不同的模块中有两个同名文件,就会出现此问题。
例如在 STACK 应用程序中。有2个模块
1. stac1
2. stac2
在 stac1->res->layout 中有 miniactivity.xml
在 stac2->res->layout 中有 miniactivity.xml
那么你就会遇到这个问题。如果您删除任何一个 xml 文件,它将正常工作。
我将一个 2 年前的项目迁移到 Android Studio(和新库),调用 PreferenceScreen 时遇到很多问题。
java.lang.NoSuchFieldError: No static field list_container of type I in class Landroid/support/v7/preference/R$id; or its superclasses (declaration of 'android.support.v7.preference.R$id' appears in /data/app/com.sh.inv-1/base.apk)
at android.support.v7.preference.PreferenceFragmentCompat.onCreateView(PreferenceFragmentCompat.java:260)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1988)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:754)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1653)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:364)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)
我的 build.gradle 是:
apply plugin: 'com.android.application'
android {
useLibrary 'org.apache.http.legacy'
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.sh.inv"
targetSdkVersion 23
versionCode 66
versionName "2.5.0"
}
buildTypes {
debug {
}
release {
minifyEnabled true
proguardFiles 'proguard-project.txt'
}
}
productFlavors {
dev {
minSdkVersion 21
}
prod {
minSdkVersion 14
}
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
repositories {
maven { url "http://jzaccone.github.io/SlidingMenu-aar" }
}
dependencies {
compile files('libs/ormlite-android-4.48.jar')
compile files('libs/ormlite-core-4.48.jar')
compile 'com.android.support:design:23.2.1'
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:preference-v7:23.2.1'
compile 'com.android.support:preference-v14:23.2.1'
compile "com.android.support:appcompat-v7:23.2.1"
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.google.android.gms:play-services-analytics:8.4.0'
compile 'com.google.android.gms:play-services-identity:8.4.0'
compile 'com.google.android.gms:play-services-drive:8.4.0'
compile 'org.apache.commons:commons-io:+'
compile 'com.cocosw:undobar:1.8.1@aar'
compile project(':afilechooser')
compile project(':simplecropimage')
}
我的片段是:
public class Settings extends android.support.v7.preference.PreferenceFragmentCompat implements
OnSharedPreferenceChangeListener {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.settings2);
我的 AppBaseTheme 是:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
真不懂怎么解决。我试过:
- 删除gradle缓存
- 更改 gradle 版本(2.10 和 2.12)
- 使用-sdk 添加:
< uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" xmlns:tools="http://schemas.android.com/tools" tools:overrideLibrary="android.support.v14.preference"/>
终于找到问题了。我有一个名为 preference_list_fragment.xml 的布局。删除文件后有效
只要一个应用程序在两个不同的模块中有两个同名文件,就会出现此问题。
例如在 STACK 应用程序中。有2个模块 1. stac1 2. stac2 在 stac1->res->layout 中有 miniactivity.xml 在 stac2->res->layout 中有 miniactivity.xml
那么你就会遇到这个问题。如果您删除任何一个 xml 文件,它将正常工作。