2016-12-16 14 views
7

APPCOMPATのオプトアウトを除くすべてのデフォルトを受け入れて、ブランドの新しいAndroidのメーカー2.2.3プロジェクトを皮切りに、私はapp/build.gradleに2つの依存関係を追加しました:リリースビルドにのみ依存関係が含まれるのはなぜですか?

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.0" 
    defaultConfig { 
    applicationId "com.commonsware.myapplication" 
    minSdkVersion 15 
    targetSdkVersion 25 
    versionCode 1 
    versionName "1.0" 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    } 
} 

dependencies { 
    compile 'com.google.code.gson:gson:2.4' 
    compile 'com.squareup.okhttp3:okhttp:3.5.0' 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
    exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    testCompile 'junit:junit:4.12' 
} 

何の問題は、私が参照しても、コンパイル時にはありませんGsonまたはOkHttpのクラス。しかし、私は、Android Studioからアプリケーションを実行し、恐ろしいNoClassDefFoundErrorを得る:

12-16 10:48:52.175 15687-15687/com.commonsware.myapplication E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.commonsware.myapplication, PID: 15687 
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/gson/GsonBuilder; 
     at com.commonsware.myapplication.MainActivity.onCreate(MainActivity.java:13) 
     at android.app.Activity.performCreate(Activity.java:6251) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.gson.GsonBuilder" on path: DexPathList[[zip file "/data/app/com.commonsware.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.commonsware.myapplication-1/lib/arm, /vendor/lib, /system/lib]] 
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
     at com.commonsware.myapplication.MainActivity.onCreate(MainActivity.java:13)  
     at android.app.Activity.performCreate(Activity.java:6251)  
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)  
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)  
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
     at android.app.ActivityThread.-wrap11(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:148)  
     at android.app.ActivityThread.main(ActivityThread.java:5417)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
    Suppressed: java.lang.ClassNotFoundException: com.google.gson.GsonBuilder 
     at java.lang.Class.classForName(Native Method) 
     at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
     at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
      ... 14 more 
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 

私はapp-debug.apkを分析するには、Android StudioのAPK Analyzerを使用している場合は、私がAを除いて、私の2つの依存関係から何もAPKに含まれていないことを確認しますGsonBuilderへの参照:

APK Analyzer of Debug Build

私は、コマンドラインビルド(gradle clean assembleDebug)から同じ結果を得ます。

しかし、releaseビルドは依存関係を持つAPKが含ま示しています

APK Analyzer of Release Build

を私はこれらのアーティファクト(com.google.code.gson:gson:2.3com.squareup.okhttp3:okhttp:3.2.0)の旧バージョンに切り替えると、彼らはdebugビルドで適切に表示されます。問題ごとの成果物であるので、私は古いGson以降OkHttpが含まれている場合、私のdebugはOkHttpないものでGsonクラスが含まれて構築します。

これらの特定のアーティファクトの特定のバージョンについては、debugビルドの場合、アーティファクトの内容は自分のAPKに追加されません。

質問です:なぜですか?

答えて

4

問題がthe new build cacheの腐敗のいくつかの並べ替えました。ビルドキャッシュを一掃して問題を解決しました。

私はビルドキャッシュを破壊のための再現性のあるシナリオを持っていないので、問題は、限られた有用性のものであってもよいけれども、私は、このことについてan issueを提出しました。

+3

I公開フォーラムの常に空想のこのユニークな機能 - あなたは時間の問題で苦労することができますが、お願いしたら... tadaaam :)あなたは瞬時にほとんどの場合解決策を自分で見つける:) –

+0

@MarcinOrlowski:中このケースでは、ビルドキャッシュがポップアップしたときに、ほとんど完全に書かれた質問がありました。キャッシュをクリアして問題を解決した後、私は問題を提出しました。質問を書く作業を行ったので、質問と回答を投稿することもできます。 :-) – CommonsWare

関連する問題