我已经创建了一个android库,它包含一个用于打开相机意图的Activity,该库为调用活动的部分在屏幕上显示的部分提供了完美的例外,并且应用程序崩溃抛出了以下错误
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'
}请注意:
aar时却不是{ transitive = true; },都没有改变scanner.aar/[library-project]/build/outputs/aar/scanner-release.aar中提取了aar文件Update1 - 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);这个context是android.app.Application的实例,而不是任何Activity的实例。
Update2 - 2017-09-14
幸运的是,在谷歌上漫游了两天之后,我发现了问题类在aar中找不到的答案。我已经将库的依赖项添加到项目中,并能够使用aar运行它,但这不是我的问题的解决方案,
下面是我目前面临的流程和问题
AAR文件中提取scanner.aar和scanner-sandbox.aar文件,并使用它们中的任何一个。.gradle文件添加额外的依赖项,更新的问题是
在开发人员同步文件时,分发aar文件而不将其发布到任何存储库(如)和库的所有依赖项的方法是什么?
发布于 2017-09-19 13:06:40
泽山
我也面临着同样的问题,我做了很多研究&我希望它能帮助你。
为项目创建.aar文件:
假设errors: System.err: java.lang.NoClassDefFoundError:
解决方案:
必须在项目应用程序gradle中手动添加.aar梯度依赖项。
发布于 2017-09-20 10:34:19
您的"Update2 - 2017-09-14“的答案-可以简单地构建一个fat aar文件。它将包含所有的依赖项,您可能必须处理的一件事是,依赖关系中的冲突有时可能会造成问题。此外,脂肪aar的大小可能是巨大的。所以试一试。
发布于 2017-09-20 19:17:20
有三种分发库的方法:
build.gradle:
buildscript { mavenCentral() mavenCentral()}依赖关系{ classpath 'com.android.tools.build:gradle:2.2.3‘classpath mavenCentral}allproject{ jcenter() }}
设置maven插件,并将组名和版本号添加到库build.gradle中:
应用插件:'com.android.library‘应用插件:'com.github.dcendents.android-maven’组= 'com.your.packagename‘版本= '1.0.0’ext.versionCode =1000Android{ compileSdkVersion 25 buildToolsVersion "25.0.3“defaultConfig { minSdkVersion 9 targetSdkVersion 25 versionCode versionCode versionName version } buildTypes {.}依赖项{.}}
设置artifactId设置为settings.gradle:rootProject.name = 'yourlibraryname‘
构建库并将其安装到本地maven。
您可以在项目文件夹上运行./gradlew安装或使用
Gradle -> YourLibrary ->其他->安装从Android (在Android的右侧)
e.直接对项目使用已安装的库。
可以通过将mavenLocal()添加到根 build.gradle来使用库。
所有项目{存储库{ jcenter() mavenLocal() //用于本地maven。}}
然后将依赖项添加到项目中:
编译‘com.your.Packagename:modulename:1.0’
也可以从本地maven路径复制生成的.aar。在Linux中,您可以从/your/userpath/.m2/repository/或~/.m2/repository/获得它。~/.m2/repository/中心的本地maven路径。https://stackoverflow.com/questions/46171191
复制相似问题