java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/graphics/ColorUtils;
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/graphics/ColorUtils;
java.lang.NoClassDefFoundError
在 Android 5.1.1
但我 运行 在 6.0.1
这里是 class 有错误:
public class DuelsTextView extends AppCompatTextView {
int fontType;
public DuelsTextView(Context context) {
super(context);
init(null);
}
public DuelsTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public DuelsTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
public void init(AttributeSet attrs) {
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.DuelsTextView);
fontType = a.getInteger(R.styleable.DuelsTextView_font_type, 0);
}
try {
Typeface myTypeface = null;
if (fontType == 0) {
myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/BreeSerif-Regular.ttf");
} else if (fontType == 1) {
myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/MarkoOne-Regular.ttf");
}
this.setTypeface(myTypeface);
} catch (Exception e) {
e.printStackTrace();
}
}
}
这里是 gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.adamvarhegyi.duelsofcodrer"
minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
mavenCentral()
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile('com.android.support:appcompat-v7:25.0.1') {
exclude module: 'support-v4'
}
compile('com.android.support:recyclerview-v7:25.0.1')
compile('com.makeramen:roundedimageview:2.2.1')
compile('org.apache.commons:commons-lang3:3.4')
compile('de.hdodenhof:circleimageview:2.1.0')
}
如果我将扩展更改为简单 TextView
它工作正常,但是 android 工作室建议 我必须使用 AppCompatTextView
自定义视图。
为什么会这样?我应该修改什么?
更改这些依赖项
compile('com.android.support:appcompat-v7:25.0.1') {
exclude module: 'support-v4'
}
compile('com.android.support:recyclerview-v7:25.0.1')
至
compile('com.android.support:appcompat-v7:25.0.0')
compile('com.android.support:recyclerview-v7:25.0.0')
不知道你为什么排除 v4,但如果不是出于某种原因我会保留它。
不知道为什么会这样,但最近发生在我身上,解决方法是将 buildToolsVersion
与支持库版本相匹配。
我怀疑该问题与使用较旧的支持库或排除 support-v4
模块有关。此外,compile
配置现在是 deprecated,应替换为 implementation
或 api
。
您的最终 gradle 配置应如下所示,
implementation 'com.android.support:appcompat-v7:26.0.1'
implementation 'com.android.support:recyclerview-v7:26.0.1'
最后,确保再次测试 with/without 排除 support-v4
模块。
java.lang.NoClassDefFoundError
在 Android 5.1.1
但我 运行 在 6.0.1
这里是 class 有错误:
public class DuelsTextView extends AppCompatTextView {
int fontType;
public DuelsTextView(Context context) {
super(context);
init(null);
}
public DuelsTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public DuelsTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
public void init(AttributeSet attrs) {
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.DuelsTextView);
fontType = a.getInteger(R.styleable.DuelsTextView_font_type, 0);
}
try {
Typeface myTypeface = null;
if (fontType == 0) {
myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/BreeSerif-Regular.ttf");
} else if (fontType == 1) {
myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/MarkoOne-Regular.ttf");
}
this.setTypeface(myTypeface);
} catch (Exception e) {
e.printStackTrace();
}
}
}
这里是 gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.adamvarhegyi.duelsofcodrer"
minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
mavenCentral()
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile('com.android.support:appcompat-v7:25.0.1') {
exclude module: 'support-v4'
}
compile('com.android.support:recyclerview-v7:25.0.1')
compile('com.makeramen:roundedimageview:2.2.1')
compile('org.apache.commons:commons-lang3:3.4')
compile('de.hdodenhof:circleimageview:2.1.0')
}
如果我将扩展更改为简单 TextView
它工作正常,但是 android 工作室建议 我必须使用 AppCompatTextView
自定义视图。
为什么会这样?我应该修改什么?
更改这些依赖项
compile('com.android.support:appcompat-v7:25.0.1') {
exclude module: 'support-v4'
}
compile('com.android.support:recyclerview-v7:25.0.1')
至
compile('com.android.support:appcompat-v7:25.0.0')
compile('com.android.support:recyclerview-v7:25.0.0')
不知道你为什么排除 v4,但如果不是出于某种原因我会保留它。
不知道为什么会这样,但最近发生在我身上,解决方法是将 buildToolsVersion
与支持库版本相匹配。
我怀疑该问题与使用较旧的支持库或排除 support-v4
模块有关。此外,compile
配置现在是 deprecated,应替换为 implementation
或 api
。
您的最终 gradle 配置应如下所示,
implementation 'com.android.support:appcompat-v7:26.0.1'
implementation 'com.android.support:recyclerview-v7:26.0.1'
最后,确保再次测试 with/without 排除 support-v4
模块。