java - 更新 - import aar file android studio




アクティビティクラスがAARファイルで見つかりませんjava.lang.NoClassDefFoundError (5)

私はアンドロイドライブラリを作成しました。それは、カメラインテントを開くために使用するアクティビティクラスを含んでいます。ライブラリーは、アクティビティを呼び出して画面上に表示される部分を除いて完璧に動作し、

Suppressed: java.lang.ClassNotFoundException: com.me.scanner.ScannerViewActivity
            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

以下は、このライブラリを使用する他のプロジェクトの私のbuild.gradleファイルです

repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    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:25.3.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.me.app:[email protected]'
    compile ('com.me.app:[email protected]'){ transitive = true; }
    testCompile 'junit:junit:4.12'
}

ご注意ください:

  • このライブラリはモジュールプロジェクトとして完全に機能し、

    compile project(':scannercontrol')

    プロジェクトでaarとして使用しているときは表示されません

  • 私は{ transitive = true; } { transitive = true; } 、変更なし

  • 私はscanner.aarファイルの名前をscanner.aar変更しscanner.aar
  • 私は/[library-project]/build/outputs/aar/scanner-release.aarファイル形式を取った/[library-project]/build/outputs/aar/scanner-release.aar

Update1 - 2017-09-14

アクティビティScannerViewActivityは私のライブラリの一部です。これは、ライブラリクラスの1つから呼び出された方法です

Intent scannerView = new Intent();
scannerView.putExtra(MESSAGE_RECEIVER, new MessageReceiver());
scannerView.setClass(context, ScannerViewActivity.class);
scannerView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(scannerView);

このcontextは、どのActivityでもなく、 android.app.Applicationのインスタンスです。

Update2 - 2017-09-14

幸いなことに、私は2日ローミングした後、私は質問クラスの答えを見つけました 。 ライブラリにプロジェクトの依存関係を追加し、 aar実行できるようにしaarが、これは私の問題の解決策ではありません。

以下は私が現在直面している流れと問題です

  • 私は、特定のバーコードスキャナハードウェアと通信するライブラリのサンドボックス版を開発しています。開発者は必ずしもハードウェアを持っていないため、開発者がデバイスカメラをバーコードとして使用できるようにするライブラリのサンドボックス版スキャナ、

  • 開発者は、提供されたSDKからAARファイルscanner.aarscanner-sandbox.aarを抽出し、どちらかを使用します

  • ライブラリのサンドボックス版を実行する場合、開発者が.gradleファイルに余分な依存関係を追加することは望ましくありません。

  • 以下は、デバイスカメラをバーコードスキャナとしてシミュレートするために使用されている依存関係です

    compile 'me.dm7.barcodescanner:zxing:1.9.8'

更新された質問は

開発者が.gradleファイルを同期させるときにインストールされるライブラリのすべての依存関係とmavenリポジトリのようなリポジトリに公開せずにaarファイルを配布する方法


この問題の原因は、クラスScannerViewActivityが次のような依存関係としてAAR内で呼び出されることです。

apply plugin: 'com.android.library'
android{...}
dependencies {
    compile 'com.me.scanner:[email protected]' //library which contains ScannerViewActivity
}

しかし、aarを使用すると(推移的にこのaarの依存関係は追加されません!)、次のような他の依存関係を追加する必要があります。

dependencies {
...
compile ('com.me.app:[email protected]')// remove{ transitive = true; }
compile ('com.me.scanner:[email protected]')
...
}

ジシアン

私は同じ問題に直面しています。私は多くの研究を行いました。

プロジェクトの.aarファイルを作成する:

  1. ライブラリモジュールの場合、.aarファイルはAndroid Studioによって自動的に作成されます。 任意のリソースファイルまたはライブラリを含むプロジェクトの場合、次の手順で説明するように.aarファイルを生成できます。
  2. プラグインを確認してください。 次のようにする必要があります。アプリケーションにある場合はライブラリに変更し、プラグインを適用する場合は 'com.android.library'
  3. 開いた右の境界線のバーを開き、 "あなたのプロジェクト" - >タスク - >ビルドに進み、assembleReleaseをダブルクリックします。 プロジェクトのビルド時には、app / build / outputs / aar /ディレクトリに2つの.aarファイル(app-debug.aarとapp-release.aar)があります。 あなたのプロジェクトで.aarファイルを使う:
  4. 「app-release.aar」ファイルを取得し、プロジェクトのlibsフォルダに貼り付けます。 libsフォルダが存在しない場合は、appディレクトリ内に "libs"という名前のディレクトリを作成します。

  5. アプリケーションのグラデルファイル、リポジトリに{flatDir {dirs 'libs'}}の依存関係{compile(name: 'app-release'、ext: 'aar')}を追加します。

  6. 同期すると、プロジェクトはライブラリファイルを使用する準備ができています。 注:.aar gradleの依存関係は、プロジェクトアプリのグラデルで手動で追加する必要があります。例:以下

エラーの想定:System.err:java.lang.NoClassDefFoundError:

溶液:

.aar gradleの依存関係は、プロジェクトのアプリケーションのgradleに手動で追加する必要があります


あなたの "Update2 - 2017-09-14"の答えは、単に太いaarファイルを構築することができます。 これにはすべての依存関係が含まれますが、処理しなければならないことの1つは、依存関係の競合で問題が発生することがあります。 脂肪の大部分の大きさも巨大であるかもしれません。 だから試してみてください。


あなたは以下のように試すことができますか?

  1. インスタント・ランを無効にし、AARを整理してください。
  2. これまでにAARをホスティングしている場所で、もう一度展開してください。
  3. 依存関係としてAARを使ってアプリケーションを再度テストします。

インスタント実行では、キャッシュによって問題が発生することがあります。

編集:ローカルAARを追加します。 あなたはここに記載されている答えに従うことができます


これを試して、

インスタント実行を無効にする

ファイル - >設定 - >ビルド、実行、展開 - >インスタント実行

これがうまくいかない場合は、私に知らせてください。





aar