私はAndroidライブラリを作成しました。これには、カメラインテントを開くために使用するアクティビティクラスが含まれています。ライブラリは、アクティビティを呼び出して画面上に表示される部分とアプリがスローをスローすることを除いて、完全に機能します次のエラー
_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:gpio_lib@aar'
compile ('com.me.app:scanner@aar'){ transitive = true; }
testCompile 'junit:junit:4.12'
}
_
ご注意ください:
このライブラリはモジュールプロジェクトとして完全に機能し、
_compile project(':scannercontrol')
_
プロジェクトでaar
として使用する場合は除く
_{ transitive = true; }
_あり、なしで試してみましたが、変更はありません
scanner.aar
_に変更しました/[library-project]/build/outputs/aar/scanner-release.aar
_の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
は_Android.app.Application
_のインスタンスであり、Activity
のインスタンスではありません
Update2-2017-09-14
幸いにも、グーグル全体で2日間ローミングした後、私は質問の答えに出くわします クラスがaarに見つかりません 。ライブラリの依存関係をプロジェクトに追加し、aar
で実行できるようにしましたが、これは私の問題の解決策ではありません。
以下は、私が現在直面しているフローと問題です
特定のバーコードスキャナーハードウェアと通信するライブラリのサンドボックスバージョンを開発しています。開発者は、デバイスのカメラをバーコードとして使用できるライブラリのサンドボックスバージョンを使用するハードウェアを必ずしも持っていないためです。スキャナー、
開発者には、提供されたAAR
からSDK
ファイル_scanner.aar
_および_scanner-sandbox.aar
_を抽出し、それらのいずれかを使用してほしい
ライブラリのサンドボックスバージョンを実行する場合、開発者が_.gradle
_ファイルに追加の依存関係を追加することは望ましくありません。
以下は、デバイスのカメラをバーコードスキャナーとしてシミュレートするために使用されている依存関係です。
_compile 'me.dm7.barcodescanner:zxing:1.9.8'
_
maven repositoryのようなリポジトリに公開せずにaarファイルを配布するための可能な方法と、開発者が_.gradle
_ファイル
zeeshan
私は多くの研究を行った同じ問題に直面しました&うまくいけばそれがあなたを助けるのを修正しました
プロジェクトの.aarファイルを作成する:
- ライブラリモジュールの場合、.aarファイルはAndroid Studioによって自動的に作成されます。任意のリソースファイルまたはライブラリを使用するプロジェクトの場合、次の手順で説明するように.aarファイルを生成できます。
- プラグインを確認してください。次のようになっているはずです。アプリケーションにある場合はライブラリに変更し、プラグインを適用してください: 'com.Android.library'
- 開いている右の境界線のGradleバーを開き、「your project」-> Tasks-> buildに移動して、assembleReleaseをダブルクリックします。プロジェクトのビルドでは、app/build/outputs/aar /ディレクトリ内に2つの.aarファイル(app-debug.aarとapp-release.aar)があります。プロジェクトで.aarファイルを使用する:
「app-release.aar」ファイルを取得して、プロジェクトのlibsフォルダーに貼り付けます。 libsフォルダーが存在しない場合は、アプリディレクトリ内に「libs」という名前のディレクトリを作成します。
以下をアプリグラドルファイルに追加します。リポジトリ{flatDir {dirs 'libs'}} dependency {compile(name: 'app-release'、ext: 'aar')}
- 同期すると、プロジェクトでライブラリファイルを使用する準備が整います。注:.aarグラドルの依存関係は、プロジェクトアプリグラドルに手動で追加する必要があります例:以下
エラーの仮定:System.err:Java.lang.NoClassDefFoundError:
ソリューション:
.aar gradleの依存関係をプロジェクトアプリgradleに手動で追加する必要があります
あなたの「Update2-2017-09-14」の答えは、単に太いaarファイルを構築することができます。これにはすべての依存関係が含まれますが、処理しなければならない可能性の1つは、依存関係の競合が問題を引き起こすことがあります。また、ファットアールのサイズは非常に大きくなる場合があります。だから試してみてください。
ライブラリを配布するには3つの方法があります。
ローカルのMavenライブラリを作成し、生成されたaarを配布します。
Gradle Android Maven plugin を使用してローカルaarを作成できます。作成方法:
a。 root_build.gradle
_にプラグインクラスパスを追加します。
_buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.2.3'
classpath 'com.github.dcendents:Android-maven-gradle-plugin:1.5'
}
}
allprojects {
repositories {
jcenter()
}
}
_
b。 mavenプラグインを設定し、グループとバージョン名をライブラリbuild.gradleに追加します。
_apply plugin: 'com.Android.library'
apply plugin: 'com.github.dcendents.Android-maven'
group = 'com.your.packagename'
version = '1.0.0'
ext.versionCode = 1000
Android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
minSdkVersion 9
targetSdkVersion 25
versionCode versionCode
versionName version
}
buildTypes {
...
}
}
dependencies {
...
}
_
c。設定アーティファクトがsettings.gradleで設定されている:
_rootProject.name = 'yourlibraryname'
_
d。ライブラリをビルドしてローカルのmavenにインストールします。
プロジェクトフォルダで_./gradlew
_ installを実行するか、
Gradle-> YourLibrary->その他-> Android Studioからインストール(Android Studio)の右側)
e。インストールしたライブラリをプロジェクトに直接使用します。
ライブラリを使用するには、mavenLocal()
をrootbuild.gradleに追加します
_allprojects {
repositories {
jcenter()
mavenLocal() // for local maven.
}
}
_
次に、依存関係をプロジェクトに追加します。
_compile 'com.your.packagename:modulename:1.0.0'
_
または、ローカルのmavenパスから生成された.aarをコピーできます。 Linuxでは、_/your/userpath/.m2/repository/
_または_~/.m2/repository/
_から取得できます。
1番と同じ手法を使用しますが、各開発者コンピューターのローカルmavenパスを_~/.m2/repository/
_中央を指すようにします。
プライベートMavenリポジトリーを使用します。 JFrog Artifactory oss または Nexus Repository OSS を使用できます
問題の原因は、クラスScannerViewActivity
が次のような依存関係としてAARの1つの中で呼び出されることです。
apply plugin: 'com.Android.library'
Android{...}
dependencies {
compile 'com.me.scanner:otherscanner@aar' //library which contains ScannerViewActivity
}
しかし、aarを使用する場合(推移的ではこのaar依存関係は追加されません!)、次のような他の依存関係を追加する必要があります。
dependencies {
...
compile ('com.me.app:scanner@aar')// remove{ transitive = true; }
compile ('com.me.scanner:otherscanner@aar')
...
}
根本的な原因はわかりませんが、このソリューションを試すことができます。アプリプロジェクトで、ScannerViewActivityから拡張されたアクティビティを定義し、AndroidManifest.xmlで宣言します。
class MyScannerViewActivity extends ScannerViewActivity {
// do nothing or something you want
}
次に、意図的にScannerViewActivityではなくMyScannerViewActivityを起動する必要があります。
以下のようにしてみませんか?
インスタント実行では、キャッシュが原因で問題が発生する場合があります。
編集:ローカルAARを追加します。あなたは言及されたように答えに従うことができます ここ