rik*_*han 15 java android android-activity aar
我创建了一个安卓库,它包含一个用于打开相机意图的活动类,该库可以完美地用于调用活动显示在屏幕上的部分,并且应用程序崩溃时抛出以下错误
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
Run Code Online (Sandbox Code Playgroud)
以下是我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'
}
Run Code Online (Sandbox Code Playgroud)
请注意:
这个库非常适合作为模块项目,
compile project(':scannercontrol')
Run Code Online (Sandbox Code Playgroud)
但不是aar在项目中使用它时
我有没有尝试{ transitive = true; },没有改变
scanner.aar /[library-project]/build/outputs/aar/scanner-release.aarUpdate1 - 2017-09-14
该活动ScannerViewActivity是我的库的一部分,这是从一个库类调用它的方式
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);
Run Code Online (Sandbox Code Playgroud)
这context是android.app.Application任何实例,而不是任何实例Activity
Update2 - 2017-09-14
幸运的是,漫游2天后,谷歌我遇到了问题的答案,没有在aar找到.我已经将库的依赖项添加到项目中并且能够运行它,aar但这不是我的问题的解决方案,
以下是我目前面临的流程和问题
我正在开发一个与特定条形码扫描仪硬件通信的库的沙箱版本,因为开发人员不一定拥有硬件,他们将使用库的沙箱版本,允许开发人员将他们的设备相机用作条形码扫描器,
我们希望开发人员提取AAR文件scanner.aar,并scanner-sandbox.aar从提供SDK和使用其中任何一个
我们不希望开发人员.gradle在他们想要运行库的沙箱版本时为其文件添加额外的依赖项,
以下是用于将设备相机模拟为条形码扫描仪的依赖关系
compile 'me.dm7.barcodescanner:zxing:1.9.8'
Run Code Online (Sandbox Code Playgroud)分发aar文件而不将其发布到任何存储库(如maven存储库)以及开发人员同步.gradle文件时安装的库的所有依赖项的可能方法是什么
泽山
我遇到了同样的问题,我做了很多研究,我修复了希望它可以帮助你
为项目创建 .aar 文件:
- 对于库模块,.aar 文件由 Android Studio 自动创建。对于具有任何资源文件或库的项目,可以按照后续步骤中所述生成 .aar 文件。
- 检查插件。应该是这样的,如果是在应用中就改成library,apply plugin: 'com.android.library'
- 打开打开的右边框gradle栏,进入“你的项目”->任务->构建,然后双击assembleRelease。在构建项目时,您会在 app/build/outputs/aar/ 目录中找到两个 .aar 文件(app-debug.aar 和 app-release.aar)。在您的项目中使用 .aar 文件:
获取“app-release.aar”文件并将其粘贴到项目的 libs 文件夹中。如果 libs 文件夹不存在,请在 app 目录中创建一个名为“libs”的目录。
将以下内容添加到应用程序 gradle 文件中,repositories { flatDir { dirs 'libs' } } dependencies { compile(name:'app-release', ext:'aar') }
- 同步时,您的项目已准备好使用库文件。注意:.aar gradle 依赖项必须手动添加到您的项目应用程序 gradle 示例:下面
错误假设:??System.err: java.lang.NoClassDefFoundError:
? 解决方案:
??
.aar gradle 依赖项必须手动添加到您的项目应用程序 gradle 中
“Update2 - 2017-09-14”的答案 - 可以简单地构建一个胖 aar 文件。它将包含所有依赖项,您可能需要处理的一件事是依赖项冲突有时可能会产生问题。而且脂肪的大小也可能很大。所以尝试一下。
问题的原因是该类ScannerViewActivity在 AAR 中作为依赖项被调用,如下所示:
apply plugin: 'com.android.library'
android{...}
dependencies {
compile 'com.me.scanner:otherscanner@aar' //library which contains ScannerViewActivity
}
Run Code Online (Sandbox Code Playgroud)
但是当您使用 aar 时(传递不会添加此 aar 依赖项!),您必须添加其他依赖项,例如:
dependencies {
...
compile ('com.me.app:scanner@aar')// remove{ transitive = true; }
compile ('com.me.scanner:otherscanner@aar')
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4642 次 |
| 最近记录: |