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 脚本来完成此操作,我很乐意分享,但可能有更好的方法来完成同样的事情。