2016-11-05 6 views
2

私はAndroidアプリケーションで新しく、おそらく何か間違っています。 javampd modueでアプリケーションをコンパイルしようとしましたが、例外: "com.google.inject.internal.util。$ ComputationException:com.google.inject.internal.util。$ ComputationException:java.lang.ExceptionInInitializerError"がスローされました。 biulder作成時:AndroidアプリケーションがGuice例外をスローする

try { 
    MPD.Builder mpdBuilder = new MPD.Builder(); 
} catch (Exception error) { 
    String text = error.getMessage(); 
    Toast.makeText(this, "Exception: " + text, Toast.LENGTH_LONG).show(); 
} 

私はGuiceのまでの例外をトレースして、その例外がここ

injector = Guice.createInjector(new MPDModule()); 

javampdモジュール内投げている考え出したフルスタックトレースは次のとおりです。

W/nalizableReferenceQueue: Could not load Finalizer in its own class loader. Loading Finalizer in the current class loader instead. As a result, you will not be able to garbage collect this class loader. To support reclaiming this class loader, either resolve the underlying issue, or move Google Collections to your system class path. 
          java.io.FileNotFoundException: com/google/inject/internal/util/$Finalizer.class 
           at com.google.inject.internal.util.$FinalizableReferenceQueue$DecoupledLoader.getBaseUrl(FinalizableReferenceQueue.java:269) 
           at com.google.inject.internal.util.$FinalizableReferenceQueue$DecoupledLoader.loadFinalizer(FinalizableReferenceQueue.java:253) 
           at com.google.inject.internal.util.$FinalizableReferenceQueue.loadFinalizer(FinalizableReferenceQueue.java:175) 
           at com.google.inject.internal.util.$FinalizableReferenceQueue.<clinit>(FinalizableReferenceQueue.java:100) 
           at com.google.inject.internal.util.$MapMaker$QueueHolder.<clinit>(MapMaker.java:787) 
           at com.google.inject.internal.util.$MapMaker$WeakEntry.<init>(MapMaker.java:946) 
           at com.google.inject.internal.util.$MapMaker$Strength$1.newEntry(MapMaker.java:312) 
           at com.google.inject.internal.util.$MapMaker$StrategyImpl.newEntry(MapMaker.java:498) 
           at com.google.inject.internal.util.$MapMaker$StrategyImpl.newEntry(MapMaker.java:419) 
           at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2029) 
           at com.google.inject.internal.Annotations$AnnotationChecker.hasAnnotations(Annotations.java:116) 
           at com.google.inject.internal.Annotations.isScopeAnnotation(Annotations.java:124) 
           at com.google.inject.internal.ScopeBindingProcessor.visit(ScopeBindingProcessor.java:40) 
           at com.google.inject.internal.ScopeBindingProcessor.visit(ScopeBindingProcessor.java:30) 
           at com.google.inject.spi.ScopeBinding.acceptVisitor(ScopeBinding.java:59) 
           at com.google.inject.internal.AbstractProcessor.process(AbstractProcessor.java:55) 
           at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:165) 
           at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103) 
           at com.google.inject.Guice.createInjector(Guice.java:95) 
           at com.google.inject.Guice.createInjector(Guice.java:72) 
           at com.google.inject.Guice.createInjector(Guice.java:62) 
           at org.bff.javampd.MPD$Builder.<init>(MPD.java:186) 
           at com.yarygin.alex.mpd_test.MainActivity.onCreate(MainActivity.java:16) 
           at android.app.Activity.performCreate(Activity.java:5971) 
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) 
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522) 
           at android.app.ActivityThread.access$800(ActivityThread.java:167) 
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1417) 
           at android.os.Handler.dispatchMessage(Handler.java:111) 
           at android.os.Looper.loop(Looper.java:194) 
           at android.app.ActivityThread.main(ActivityThread.java:5534) 
           at java.lang.reflect.Method.invoke(Native Method) 
           at java.lang.reflect.Method.invoke(Method.java:372) 
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955) 
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750) 

私のGradleファイル:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 
    defaultConfig { 
     applicationId "com.yarygin.alex.mpd_test" 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:22.2.1' 
    testCompile 'junit:junit:4.12' 
    compile 'net.thejavashop:javampd:5.0.3' 
} 

そして、私の活動のファイル:

package com.yarygin.alex.mpd_test; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Toast; 

import org.bff.javampd.MPD; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     try { 
      MPD.Builder mpdBuilder = new MPD.Builder(); 
     } catch (Exception error) { 
      String text = error.getMessage(); 
      Toast.makeText(this, "Exception: " + text, Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

私は2週間以内に理由を見つけることができません。助けてください!

答えて

1

AndroidアプリはJavaで書かれていますが、構成上の問題がなくてもJavaライブラリをAndroidアプリで使用することはできません。

Java MPDのライブラリが内部的にGuiceに依存している場合、Androidプロジェクト内でそのまま使用することは難しいでしょう。これは、GuiceがAndroidを使用するためのいくつかの設定上の問題を抱えているためです。また、考慮すべきいくつかの問題があります。実証するために、私は、Android用の他のDIフレームワークの1つのFAQから引用:

  1. Guiceのが遅い、少なくともこれ以上Androidアプリの期待 パフォーマンスと一致しませんでした。
  2. のGuice 4は、数十の問題をmultidexに貢献する方法の何千もの と重い のAPK
  3. Guiceにはリフレクションを使用し、反射が Android上で特に遅いですが含まれているグアバを使用しています。主に、反射コードのJITがPCのJVMとは逆の であるためです。

あなたは反射とAndroidと他の統合の問題のGuiceのの使用を回避するためにGuiceののフォークと注釈プロセッサを使用する、Roboguiceを使用して試みることができます。それがあなたのMDPライブラリを動作させるために十分なGuiceクラスを提供すれば、私は驚くでしょう。それ以外の場合は、使用する別のライブラリを見つける必要があります。

+0

ありがとうございます。 –

+0

私はライブラリをそのまま使用することはできません。 あなたは私の場合に縛らなければならないものを何か指摘できますか?私はちょうどそれが働くように始める方法を理解したい。 –

+0

いいえ、私はthejavashopについて話しています:javampd。私はこの作品を作ることができる方法はありますか? –

関連する問題