【问题标题】:Android is possible include .aar with activity extends Application?Android 可能包含 .aar 和活动扩展应用程序?
【发布时间】:2016-12-14 15:26:46
【问题描述】:

我有一个 Android 项目,里面有一个库模块,我的项目工作正常,编译项目我将 .aar 包含在测试项目中,一切正常。 现在,我在我的库模块中添加了一个扩展应用程序的 Activity,Y 在库的 manifiest.xml 中添加了这个类

<application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:name=".MyActivityExtendsApplications"

当我测试项目时,它运行良好,但是当我使用 .aar 并在其他项目上测试它时失败。问题是它没有找到活动扩展应用程序......我已经反编译了aar,我看到一切都是正确的,所有类都在文件夹内 错误是

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

我在库 .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'

    }
}

我在我的测试项目中检查了合并的清单,并且活动在那里

application
        android:name="com.mylibrary.MyActivityExtendsApplications"
        android:allowBackup="true"

我可以在我的测试项目中导入这个活动并查看代码

我在 libs 文件夹中添加了 mylibrary。 当我删除活动 MyActivityExtendsApplications 时,我的库工作正常。

【问题讨论】:

  • 让 Activity 扩展应用程序的目的是什么?
  • 嗨@petrumo,我需要这个,因为我的 aar 实现了altbeacon.github.io/android-beacon-library/samples.html,我需要从后台开始
  • 哇,我很惊讶 Activity 甚至能够扩展 Application。这当然不是 Android 信标库用于后台启动的预期用途。我不想用这个不寻常的应用程序使用问题来回避这个问题,但如果需要,我很乐意在不同的问题中解决它。

标签: android aar altbeacon


【解决方案1】:

问题可能是在您生成库 aar 时缺少 Android Beacon 库 aar 文件,并且异常描述只是具有误导性。我认为在生成新的 aar 文件时不会自动合并来自 aar 文件的类。您可以检查这些文件(如 Beacon.class)是否从您的 aar 中丢失。

如果确实是这个问题,有两种可能的解决方案:

  • 在您的应用程序中,引用您的库 aar 文件和 Android Beacon 库 aar 文件。
  • 将第一个 aar 文件中的类合并到新的 aar 文件中。我之前使用过一个相当不优雅的 shell 脚本来完成此操作,我很乐意分享,但可能有更好的方法来完成同样的事情。

【讨论】:

  • 非常感谢,@davidgyoung,我认为就像 .aar 包含 manifest.xml 一样,我还包含了使用 android studio 创建库模块时生成的 build.grandle。我的错误,我没有意识到您的项目类不包括在内。另一方面,是否没有可能使用与目标项目的 build.grandle 合并的 build.grandle 进行 .aar?类似于 IOS 的 .framework 的东西,在资源中可以将资源添加到它的库中。感谢您的帮助,我借此机会向您的非凡库表示祝贺
  • 是的,我不知道有什么方法可以在 Gradle 或 Android Studio 中自动执行此操作,但我已经有一年或更长时间没有研究过了。这是我想出的为我解决问题的 hacky shell 脚本。这是基于一个库项目,该项目将 Android Beacon 库作为其根目录下一层的子项目。使用此脚本需要您自担风险! gist.github.com/davidgyoung/aada365eeb69db12027532c32243674f
  • 非常感谢脚本,@davidgyoung,今天和几周前,当我为 IOS 制作我的应用程序时,你帮了我很多,我搜索了有关 ibeacon 协议的信息,发现了你对其他人的解释。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2011-07-09
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多