2016-01-22 4 views
2

Я создал один пример приложения, используя parse.com jar. В этом проекте Buid версии SDK было 22 (он работал нормально). Но после изменения с 23 я столкнулся с некоторыми проблемами при компиляции приложения. Я попытался очистить проект, недействительно кэшировать. Перестроить проект и т. Д., Но я столкнулся с такой же проблемой: NoClassDefFoundError: com.parse.ParseRequest. Android Parse Exception

FATAL EXCEPTION: main 
java.lang.NoClassDefFoundError: com.parse.ParseRequest 
at com.parse.Parse.initialize(Parse.java:184)
Я не могу найти точное решение. Я проверил папку libs jar. Я также пробовал с последним кодом gradle, но сталкивался с такой же ошибкой. После удаления баннера синтаксиса я могу скомпилировать свой проект. Мои зависимочти

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile files('libs/org.apache.http.legacy.jar') 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
    compile 'com.android.support:cardview-v7:23.1.1' 
    compile 'com.google.android.gms:play-services:8.1.0' 
    compile 'de.hdodenhof:circleimageview:1.3.0' 
    compile project(':MaterialShowcaseView') 
    compile files('libs/Parse-1.9.2.jar') 
    compile files('libs/bolts-android-1.2.0.jar') 
    compile files('libs/universal-image-loader-1.9.4.jar') 

} 

Если я могу изменить это с зависимостями

compile 'com.parse.bolts:bolts-android:1.4.0' 
compile 'com.parse:parse-android:1.12.0'
то ошибка отличается. Ошибка:
java.lang.NoClassDefFoundError: com.parse.ParsePlugins$1 
at com.parse.ParsePlugins.restClient(ParsePlugins.java:92) 
at com.parse.Parse.initializeParseHttpClientsWithParseNetworkInterceptors(Parse.java:762) 
at com.parse.Parse.initialize(Parse.java:365) 
at com.parse.Parse.initialize(Parse.java:344)
Пожалуйста, предложите мне, что не так с этой зависимостью. Заранее благодарен

+0

Я думаю, вам нужно проверить, проверен ли экспорт для вашей библиотеки: щелкните правой кнопкой мыши на своем проекте -> «Настройки модуля» -> «Зависимости», а затем проверьте, отмечен ли экспорт. – Opiatefuchs

+0

@ Opiatefuchs Я проверил его зависимость Я вижу, что это было связано с http://screencast.com/t/fUynUfMqZ –

+0

@Opiatefuchs есть ли какие-либо другие настройки, которые мне нужно изменить? Я проверил еще одну банку, отлично работает с этой зависимостью –

ответ

3

Проблема не из-за класса синтаксического анализа. По ошибке вы получаете эту ошибку из-за mulitdex не обработано & Инициализация синтаксического анализа при запуске приложения, поэтому он даст классу не найденную ошибку.

добавить ниже строк build.gradle для обработки нескольких DEX

Чтобы решить вопрос, что я даю в моем build.gradle

dexOptions { 
     incremental true 
     // here heap size give 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY 

     javaMaxHeapSize "4g" 
    } 


dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
    // your dependencies which you are using. 

} 

Весь build.gradle

apply plugin: 'com.android.application' 
repositories { 
    mavenCentral() 

} 
configurations { 
// all*.exclude group: 'com.android.support', module: 'recyclerview-v7' 
} 

android { 
    signingConfigs { 
     /* 
     releasebuild { 
      keyAlias 'hellotest' 
      keyPassword 'hellotest' 
      storeFile file('path to keystore') 
      storePassword 'hellotest' 
     } 
     */ 
    } 
    compileSdkVersion 'Google Inc.:Google APIs:22' 
    buildToolsVersion '23.0.0' 
    /* if you got error regarding duplicate file of META-INF/LICENSE.txt from jar file 
    packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
    } 
    */ 
    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" 
    } 
    defaultConfig { 
     multiDexEnabled true 
     applicationId "com.myapp.packagenme" 
     minSdkVersion 17 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      signingConfig signingConfigs.releasebuild 
     } 
     debug { 
      signingConfig signingConfigs.releasebuild 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
    // your dependencies which you are using. 

} 

С Помощь android developer multidex guide MultiDexApplication class

Для установки MultiDex.install я см android developer link

public class MyAppClass extends MultiDexApplication{ 
@Override 
    protected void attachBaseContext(Context newBase) { 
     MultiDex.install(newBase); 
     super.attachBaseContext(newBase); 
    } 
} 

Предложение

Selectively compiling APIs into your executable

Не использовать весь использование сервиса Google Play требуется только library.From версии 6.5, вы можете вместо этого выборочно компилируйте API-интерфейс службы Google Play в ваше приложение. Например, чтобы включить только Google Fit и Android Wear API, замените следующую строку в файле build.gradle:

compile 'com.google.android.gms:play-services:8.4.0' 

с этими линиями:

compile 'com.google.android.gms:play-services-fitness:8.4.0' 
compile 'com.google.android.gms:play-services-wearable:8.4.0' 

Позвольте мне знать, если что-нибудь.

+0

@bhavin проверить обновленный ответ с предложением. используя необходимую библиотеку сервисов воспроизведения, вы можете решить свою проблему без добавления multidex. – user1140237

+1

Я не пробовал ваш полный код, но «Предложение» работает для меня. Удаленная неиспользуемая индивидуальная работа для игровых сервисов для меня не нужна multi-dex Спасибо за эту большую помощь. –

+0

@bhavinchauhan suggestion work thn error is multi dex only, так что мой код также будет работать .. :) – user1140237

Смежные вопросы