Android 可以包含 .aar 和 activity 扩展应用程序吗?
Android is possible include .aar with activity extends Application?
我有一个 Android 项目,里面有一个库模块,我的项目工作正常,编译项目我得到了包含在测试项目中的 .aar,一切正常。
现在,我在我的库模块中添加了一个扩展应用程序的 Activity,Y 在库的 manifiest.xml 中添加了这个 class
<application
android:allowBackup="true"
android:label="@string/app_name"
android:name=".MyActivityExtendsApplications"
当我测试该项目时它工作完美,但是当我使用 .aar 并在其他项目上测试它时失败。问题是它没有找到 activity extend Application ...我已经反编译了 aar,我看到一切都是正确的,所有 class 都在文件夹
错误是
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mylibrary.MyActivityExtendsApplications" on path: DexPathList[[zip file "/data/app/com.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapplication-1/lib/arm, /vendor/lib, /system/lib]]
Suppressed: java.lang.ClassNotFoundException: com.mylibrary.MyActivityExtendsApplications
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)
... 12 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
我将 grandle 依赖项添加到库 .aar 在所有情况下都以相同的方式
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:24.2.1'
compile 'com.android.support:design:24.2.1'
testCompile 'junit:junit:4.12'
compile 'mylibrary-debug.mylibrary-debug@aar'
}
repositories{
flatDir{
dirs 'libs'
}
}
我检查了我的测试项目中的合并清单,activity 在那里
application
android:name="com.mylibrary.MyActivityExtendsApplications"
android:allowBackup="true"
我可以在我的测试项目中导入这个 Activity 并查看代码
并且我在 libs 文件夹中添加了 mylibrary。
当我删除 activity MyActivityExtendsApplications 时,我的库工作正常。
问题可能是在您生成库 aar 时 Android Beacon 库 aar 文件丢失,并且异常描述只是误导。我认为在生成新的 aar 文件时,aar 文件中的 类 不会自动合并。您可能会检查您的 aar 中是否缺少这些文件(例如 Beacon.class)。
如果确实是这个问题,有两种可能的解决方案:
- 在您的应用程序中,参考您的库 aar 文件和 Android 信标库 aar 文件。
- 将第一个 aar 文件中的 类 合并到新的 aar 文件中。我以前用一个相当不优雅的 shell 脚本来完成此操作,我很乐意分享,但可能有更好的方法来完成同样的事情。
我有一个 Android 项目,里面有一个库模块,我的项目工作正常,编译项目我得到了包含在测试项目中的 .aar,一切正常。 现在,我在我的库模块中添加了一个扩展应用程序的 Activity,Y 在库的 manifiest.xml 中添加了这个 class
<application
android:allowBackup="true"
android:label="@string/app_name"
android:name=".MyActivityExtendsApplications"
当我测试该项目时它工作完美,但是当我使用 .aar 并在其他项目上测试它时失败。问题是它没有找到 activity extend Application ...我已经反编译了 aar,我看到一切都是正确的,所有 class 都在文件夹 错误是
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mylibrary.MyActivityExtendsApplications" on path: DexPathList[[zip file "/data/app/com.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapplication-1/lib/arm, /vendor/lib, /system/lib]]
Suppressed: java.lang.ClassNotFoundException: com.mylibrary.MyActivityExtendsApplications
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)
... 12 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
我将 grandle 依赖项添加到库 .aar 在所有情况下都以相同的方式
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:24.2.1'
compile 'com.android.support:design:24.2.1'
testCompile 'junit:junit:4.12'
compile 'mylibrary-debug.mylibrary-debug@aar'
}
repositories{
flatDir{
dirs 'libs'
}
}
我检查了我的测试项目中的合并清单,activity 在那里
application
android:name="com.mylibrary.MyActivityExtendsApplications"
android:allowBackup="true"
我可以在我的测试项目中导入这个 Activity 并查看代码
并且我在 libs 文件夹中添加了 mylibrary。 当我删除 activity MyActivityExtendsApplications 时,我的库工作正常。
问题可能是在您生成库 aar 时 Android Beacon 库 aar 文件丢失,并且异常描述只是误导。我认为在生成新的 aar 文件时,aar 文件中的 类 不会自动合并。您可能会检查您的 aar 中是否缺少这些文件(例如 Beacon.class)。
如果确实是这个问题,有两种可能的解决方案:
- 在您的应用程序中,参考您的库 aar 文件和 Android 信标库 aar 文件。
- 将第一个 aar 文件中的 类 合并到新的 aar 文件中。我以前用一个相当不优雅的 shell 脚本来完成此操作,我很乐意分享,但可能有更好的方法来完成同样的事情。