Android - MultiDexEnable=true 导致 Picasso 崩溃
Android - MultiDexEnable=true causes Picasso to Crash
我在 gradle 文件中使用了 MultiDexEnable=true 命令来集成 cometChat sdk。但是 运行 还不错的 Picasso 库现在崩溃了,并出现以下错误。能否请您指导解决方案?
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.edesign.astutesol.eyesapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
/*repositories {
maven {
url 'https://repo1.maven.org/maven2/'
// url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}*/
dexOptions {
javaMaxHeapSize "4g"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
/*compile('org.apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'*/
/*compile 'com.loopj.android:android-async-http:1.4.9'*/
/*compile 'com.loopj.android:android-async-http:1.4.9-SNAPSHOT'*/
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.mcxiaoke.volley:library:1.0.15'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.google.code.gson:gson:2.2.+'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
compile 'de.hdodenhof:circleimageview:2.0.0'
}
日志猫
Process: com.edesign.astutesol.eyesapp, PID: 29018 java.lang.NoClassDefFoundError: com.squareup.picasso.Picasso
at com.squareup.picasso.Picasso.<clinit>(Picasso.java:109)
at com.edesign.astutesol.eyesapp.BaseFragmentActivity.SetDrawer(BaseFragmentActivity.java:81)
at com.edesign.astutesol.eyesapp.BaseFragmentActivity.onCreate(BaseFragmentActivity.java:65)
at com.edesign.astutesol.eyesapp.MapsActivity.onCreate(MapsActivity.java:152)
at android.app.Activity.performCreate(Activity.java:5541)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2368)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464)
at android.app.ActivityThread.access0(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5653)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
使您的申请class像下面这样
public class MyAppClass extends MultiDexApplication{
@Override
protected void attachBaseContext(Context newBase) {
MultiDex.install(newBase);
super.attachBaseContext(newBase);
}
}
将此库添加到您的依赖项中
dependencies {
compile 'com.android.support:multidex:1.0.1'
// your dependencies which you are using.
}
启用 build.gradle
选项后,您需要处理多个 dex 文件
& 如果在您的项目中使用应用程序 class 而不是使用 MultiDexApplication
扩展它并在 attachBaseContext
中处理多个 dex 文件
安装MultiDex.installi refer android developer link
例如
public class MyAppClass extends MultiDexApplication{
@Override
protected void attachBaseContext(Context newBase) {
MultiDex.install(newBase);
super.attachBaseContext(newBase);
}
}
在您的 AndroidManfiest 文件应用程序名称中声明 MyAppClass
。
<application
android:name="MyAppClass"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
//... your other manifest declaration
</application>
已更新gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.edesign.astutesol.eyesapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
/*repositories {
maven {
url 'https://repo1.maven.org/maven2/'
// url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}*/
dexOptions {
jumboMode = true
incremental true
// here heap size give 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY
javaMaxHeapSize "4g"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:multidex:1.0.1'
//your dependencies which you are using.
/*compile('org.apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'*/
/*compile 'com.loopj.android:android-async-http:1.4.9'*/
/*compile 'com.loopj.android:android-async-http:1.4.9-SNAPSHOT'*/
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.mcxiaoke.volley:library:1.0.15'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.google.code.gson:gson:2.2.+'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
compile 'de.hdodenhof:circleimageview:2.0.0'
}
建议
只使用需要的播放服务库,不要添加整个播放服务组。 Refer this link。它也会减少方法计数和未使用的库的数量。
示例
compile 'com.google.android.gms:play-services:8.4.0'
使用这些行(根据所需的功能添加 artifactId(组),如 play-services-fitness
play-services-wearable
等):
compile 'com.google.android.gms:play-services-fitness:8.4.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'
参考我对其他问题的回答
我在 gradle 文件中使用了 MultiDexEnable=true 命令来集成 cometChat sdk。但是 运行 还不错的 Picasso 库现在崩溃了,并出现以下错误。能否请您指导解决方案?
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.edesign.astutesol.eyesapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
/*repositories {
maven {
url 'https://repo1.maven.org/maven2/'
// url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}*/
dexOptions {
javaMaxHeapSize "4g"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
/*compile('org.apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'*/
/*compile 'com.loopj.android:android-async-http:1.4.9'*/
/*compile 'com.loopj.android:android-async-http:1.4.9-SNAPSHOT'*/
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.mcxiaoke.volley:library:1.0.15'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.google.code.gson:gson:2.2.+'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
compile 'de.hdodenhof:circleimageview:2.0.0'
}
日志猫
Process: com.edesign.astutesol.eyesapp, PID: 29018 java.lang.NoClassDefFoundError: com.squareup.picasso.Picasso
at com.squareup.picasso.Picasso.<clinit>(Picasso.java:109)
at com.edesign.astutesol.eyesapp.BaseFragmentActivity.SetDrawer(BaseFragmentActivity.java:81)
at com.edesign.astutesol.eyesapp.BaseFragmentActivity.onCreate(BaseFragmentActivity.java:65)
at com.edesign.astutesol.eyesapp.MapsActivity.onCreate(MapsActivity.java:152)
at android.app.Activity.performCreate(Activity.java:5541)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2368)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464)
at android.app.ActivityThread.access0(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5653)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
使您的申请class像下面这样
public class MyAppClass extends MultiDexApplication{
@Override
protected void attachBaseContext(Context newBase) {
MultiDex.install(newBase);
super.attachBaseContext(newBase);
}
}
将此库添加到您的依赖项中
dependencies {
compile 'com.android.support:multidex:1.0.1'
// your dependencies which you are using.
}
启用 build.gradle
& 如果在您的项目中使用应用程序 class 而不是使用 MultiDexApplication
扩展它并在 attachBaseContext
安装MultiDex.installi refer android developer link
例如
public class MyAppClass extends MultiDexApplication{
@Override
protected void attachBaseContext(Context newBase) {
MultiDex.install(newBase);
super.attachBaseContext(newBase);
}
}
在您的 AndroidManfiest 文件应用程序名称中声明 MyAppClass
。
<application
android:name="MyAppClass"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
//... your other manifest declaration
</application>
已更新gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.edesign.astutesol.eyesapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
/*repositories {
maven {
url 'https://repo1.maven.org/maven2/'
// url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}*/
dexOptions {
jumboMode = true
incremental true
// here heap size give 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY
javaMaxHeapSize "4g"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:multidex:1.0.1'
//your dependencies which you are using.
/*compile('org.apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'*/
/*compile 'com.loopj.android:android-async-http:1.4.9'*/
/*compile 'com.loopj.android:android-async-http:1.4.9-SNAPSHOT'*/
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.mcxiaoke.volley:library:1.0.15'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.google.code.gson:gson:2.2.+'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
compile 'de.hdodenhof:circleimageview:2.0.0'
}
建议
只使用需要的播放服务库,不要添加整个播放服务组。 Refer this link。它也会减少方法计数和未使用的库的数量。
示例
compile 'com.google.android.gms:play-services:8.4.0'
使用这些行(根据所需的功能添加 artifactId(组),如 play-services-fitness
play-services-wearable
等):
compile 'com.google.android.gms:play-services-fitness:8.4.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'
参考我对其他问题的回答