2017-02-24 11 views
0

における第三のlibを含めることはできませんなぜ私が持っていた問題
"java.lang.NoClassDefFoundErrorが:の失敗解像度:Lorg/apacheの/コモンズ/ langが/のStringUtils;"
私は自分のアンドロイドのlibでdepondsアンドロイドアプリを実行しようとしたとき。
Fllowingは私の手順です:
は、Androidプロジェクトを作成し、それに「sptvlib」という名前の新しいモジュールを構築しました。
このモジュールは「sptvlib」のGradleファイルを参照lib.please文字列utilsのある「共通-LANG」という名前のサードパーティ製のlibに依存します:プロジェクト全体を構築した後libのモジュールは、Androidスタジオ

dependencies { 
    ... 
    compile 'org.apache.directory.studio:org.apache.commons.lang:2.6' 
    ... 
} 

を、私が得ましたモジュールsptvlib.aarファイルにコピーし、別のアンドロイドアプリプロジェクトの "libs"ディレクトリにコピーしました。

repositories { 
    flatDir { 
     dirs 'libs' 
    } 
} 
dependencies { 
... 
    compile(name: 'sptvlib', ext: 'aar') 
... 
} 

私は正常にこのアプリを構築し、それが実行したときに、logcatは "java.lang.NoClassDefFoundErrorが" エラーを示しました。 私は "commons.lang"宣言をアプリケーションプロジェクトgradleに再追加しなければなりません。そしてそれは正常に実行されます。私たちは第三者のlibを自分のモジュールに追加しました。自分のモジュールに依存しているアプリが、ランタイムにそれを見つけることができないのはなぜですか?

答えて

0

私はあなたのメインアプリケーションプロジェクトでcommons.langのいくつかの機能を使用していると仮定します。

sptvlibライブラリのコンパイル済みアセンブリコードを使用しているため、メインアプリケーションプロジェクトでsptvlibのコンパイル済み公開関数を使用できます。

しかし、メインのアプリケーションプロジェクトでは、直接commons.langのライブラリ関数にアクセスすることはできません。 これは、sptvlibコードをアプリケーションプロジェクトにモジュールとして追加していないためです。 sptvlibのコンパイル済みバージョンのみを使用しています。

+0

so ... "sptvlib.aar"を構築したのは、 "rxjava"や "retrofit"などのような実際のライブラリではありません。もし他のアプリが "sptvlib"の機能を使用しているのであれば"commons.lang" libを実行してokを実行すると、各アプリケーションプロジェクトで新しいモジュールを作成し、 "sptvlib"コードをコピーする必要があります。他のアプリが "commons.lang" libに依存する "sptvlib"の機能を使用している場合、本当にありがとう^ _^ –

+0

libは完全に動作するはずです。しかし、あなたは "commons.lang"の機能をアプリで直接使うことはできません。 – nnn

+0

私のアプリは3番目のlibの機能を直接使用せず、3番目のlibに依存するsptvlibのいくつかのメソッドを呼び出すだけです... –

関連する問題