标签: aar

AAR不包括模块的资源

我有一个由2个模块组成的Android库:

Project Root
+-- moduleA
|   +-- src
|   \-- build.gradle
|
+-- moduleB
|   +-- src
|   \-- build.gradle
|
+-- build.gradle
+-- settings.gradle
Run Code Online (Sandbox Code Playgroud)

settings.gradle

include ':moduleB', 'moduleA'
Run Code Online (Sandbox Code Playgroud)

moduleA /的build.gradle

apply plugin: 'com.android.library'
...
dependencies {
    compile project(':moduleB')
}
Run Code Online (Sandbox Code Playgroud)

moduleB /的build.gradle

apply plugin: 'com.android.library'
...
Run Code Online (Sandbox Code Playgroud)

当我尝试使用gradle生成的AAR时,不包括moduleB的资源.我试图将两个AAR推送到maven本地,但结果相同.

如果我将moduleA的类型更改为application而不是library,则生成的APK包含正确的资源.

我应该怎么做才能获得包含两个模块资源的AAR?

java resources android gradle aar

6
推荐指数
1
解决办法
442
查看次数

多个AAR文件

我使用的是Android Studio 1.2

我创建了一个私有库,我想在另一个应用程序中使用它.

要使用它我创建一个AAR文件,但这个AAR不起作用.我的库中有一个对AAR文件的依赖.

AAR文件不依赖?

如果我使用jar,我包括创建所有依赖项,项目工作正常.

注意 :

我知道如何导入AAR文件.问题是在AAR中使用AAR ..

谢谢.

android android-studio aar

6
推荐指数
2
解决办法
5266
查看次数

gradle可以解决Android .aar文件中的依赖关系吗?

我正在开发一个内部库(我们称之为"banana_lib"),它将包含在Android应用程序项目中.我想以.aar文件的形式向客户端提供此库.

我的图书馆依赖于另一个图书馆(让我们说Gson).如果我能帮助它,我想避免将这种依赖的类捆绑到我的库中("胖罐","超级罐"方法).

我知道我可以要求我的库的用户将依赖项包含在应用程序的build.gradle文件中:

dependencies {
    compile 'com.google.code.gson:gson:2.2.4'
    compile files('libs/banana_lib.aar')
Run Code Online (Sandbox Code Playgroud)

}

但我不想让我的库的用户在应用程序的build.gradle文件中包含我的库的依赖项给图书馆用户带来负担.

问题: 有没有办法让gradle自动解析/包含.aar文件的依赖项?有什么办法可以让.aar库的用户尽量减少工作量?我需要提供一对.aar和.pom文件吗?我的主要目标是减少这个库的用户必须做的事情.我觉得图书馆应该理想地定义它的所有依赖项,gradle应该只在后台解决它们.

换一种略有不同的方式:有没有办法允许客户端/用户通过以下方式包含(内部!)库(具有外部依赖性):1.)将.aar文件添加到构建中.2.)将它包含在build.gradle中.

如果有其他解决方案可以将库的用户/包含者必须做的工作量保持在最低限度,那么这也很有趣:)

非常感谢!

android build gradle aar

6
推荐指数
1
解决办法
1273
查看次数

排除或覆盖AAR清单

我正在为我的项目添加一个库.它打包成一个AAR.但它有一个BroadcastReceiver听取BOOT_COMPLETED启动服务.我不想在我的应用程序中出现此行为.我希望它能在应用程序启动时启动.(这部分已经完成AAR,我假设用户强制停止了应用程序).

有没有办法修改他们的清单; 或者指定Gradle不合并他们的清单(我认为我必须在我自己的清单中宣布他们的活动); 或者覆盖他们的清单,并android:enabled="falseBroadcastReceiver"?

我也希望在清单中执行此操作,或者Gradle因为如果我以编程方式执行此操作,并且如果他们安装应用程序但从未打开它,那么下次用户重新启动手机时,库服务将自动启动.

android gradle android-manifest aar

6
推荐指数
1
解决办法
1438
查看次数

在Android库项目中包含AAR依赖项

在我的Android Studio Gradle项目中,我使用了几个库,而一个库应该使用本地AAR文件作为依赖项.我使用流行的解决方案将AAR文件作为依赖项包含在我的库项目中:

flatDir {
    dirs 'libs'
}

compile(name: 'aar-library', ext: 'aar')
Run Code Online (Sandbox Code Playgroud)

当我现在尝试同步时,我收到错误消息

无法解决:依赖'aar-library'

在我的主项目中,即使我没有在那里使用/引用AAR文件.如果我只是将AAR文件复制到我的主项目的libs文件夹中也可以.任何的想法?

android android-studio android-gradle-plugin aar

6
推荐指数
1
解决办法
3938
查看次数

如何将.aar依赖包含到Android库.aar文件中

我写了一些库,它有一部分UI.此外,该库使用其他库.我想提供发布.aar以在任何应用程序中使用此部分UI.

我的图书馆有下一个家属:

    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
    compile ('com.android.support:recyclerview-v7:22.2.1'){
        exclude group: 'com.android.support', module: 'support-v4'
    }
    compile 'com.inthecheesefactory.thecheeselibrary:stated-fragment-support-v4:0.10.0'

    //Http communication, websockets, etc.
    compile 'com.squareup.okhttp:okhttp:2.4.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'

    //Fonts
    compile 'uk.co.chrisjenx:calligraphy:2.1.0'

    //Unit tests
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.9.5'

    //Other
    compile ('org.apache.commons:commons-lang3:3.4'){
        exclude group: 'org.apache.httpcomponents'
    }

    //Reactive programmnig
    compile 'io.reactivex:rxjava:1.0.13'
    compile 'io.reactivex:rxandroid:0.25.0'

    compile 'com.github.bumptech.glide:glide:3.6.1'
Run Code Online (Sandbox Code Playgroud)

当我构建.aar一切都很好,但当我将其包含.aar在另一个应用程序中时,我有下一个问题:

1). ./gradlew clean build

/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.

/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.

/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.

/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.

/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.

/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.

:app:processDebugResources FAILED

解决方案非常简单 - 添加到MainApp/app/build.gradle下一行: …

android android-library android-gradle-plugin aar maven-publish

6
推荐指数
1
解决办法
2433
查看次数

使用多模块android库进行Gradle配置

回到历史

我有这个aar开发人员可以正常使用的android库

compile 'com.companyname.sdk:android-sdk:2.x'
Run Code Online (Sandbox Code Playgroud)

现在我们正在从头开始重新编写库来创建V3.

在这次重新组织中,我们设法将lib分解为模块.所以可以说在V3上我们会有以下工件

compile 'com.companyname.sdk:core:3.x'
compile 'com.companyname.sdk:extra_1:3.x'
compile 'com.companyname.sdk:extra_2:3.x'
compile 'com.companyname.sdk:extra_ ....
Run Code Online (Sandbox Code Playgroud)

这将在gradle结构上给出以下模块:

root:
  |- test_app (apk just for testing, not deployed anywhere)
  |- sdk (aka: core)
  |- extra_1
  |- extra_2
  |- extra_ ... etc
Run Code Online (Sandbox Code Playgroud)

每个extra在他们的模块build.gradle有一个provided (':sdk'),这样可以使用一切从sdk模块,但不实际编译它自己内部.

但我还想为现有的主机应用程序提供一个简单的迁移路径.意思是,我想在V3上也有以下的神器组合coreextra_1(它基本上是V2上的当前内容).

compile 'com.companyname.sdk:android-sdk:3.0.0'
Run Code Online (Sandbox Code Playgroud)

这一切听起来都很理论,但是我很难把它想象成一个gradle结构,让我轻松导出所有这些.

我想要实现的目标

所以我希望能够在构建期间生成以下工件:

  • android-sdk包括coreextra_1
  • core
  • extra_1
  • ......所有其他额外的东西

我试过了什么

  • 添加一个名为的额外模块legacy,com.android.library无需任何代码即可应用,并compile project为其他模块添加.它会生成一个空的aar

  • 使用两个模块中的sourceSets添加核心/旧版buildTypes.从未生成2aar …

android gradle android-library android-gradle-plugin aar

6
推荐指数
1
解决办法
1091
查看次数

如何在Android中签署AAR工件?

我正在开发一个.AAR安卓库,我想用自己的密钥签署已发布的工件,以便我可以确定是否已经发布了具有相同名称和功能的假aar.

通知1:

我希望能够以编程方式检查我的库的真实性,即使是伪造的库,也只是伪造我的aar文件的一部分功能.

通知2:

打算将这个aar发布到maven,sonatype或任何其他公共存储库中.因此,我将签署一个典型的发布流程,如签署apk文件.

java android gradle aar android-signing

6
推荐指数
1
解决办法
3679
查看次数

Gradle Plugin 3.0.1 AAR传递依赖缺失

我希望在库(AAR)中使用Firebase Analytics.使用Android Gradle Plugin 3.0.1和Gradle 4.1.我已经包含了firebase依赖项api,但是,当打包到AAR中时,缺少依赖项,并且它在运行时在使用应用程序中崩溃(它不是该应用程序中的"模块").这次崩溃是由于一个java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.analytics.FirebaseAnalytics"例外.

图书馆模块: build.gradle

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
    implementation "com.android.support:support-annotations:$supportLibraryVersion"
    implementation "com.android.support:appcompat-v7:$supportLibraryVersion"
    api 'com.google.firebase:firebase-core:11.6.0'
}
Run Code Online (Sandbox Code Playgroud)

我可以通过implementation "<firebase>"在消费应用程序中包含该行来解决这个问题,但是,我理解这api将作为对消费者的传递依赖性公开.

我不想强制消费者应用程序实现Firebase,并且在没有设置google-play-services.json文件,插件和app/build.gradle更改时它是有用的(假设我有消费者的实现行).

使用库模块中的任何一个implementation <firebase>api <firebase>在同一个项目中,应用程序包括它:implementation project(':mylib')它运行正常,只有在使用AAR时才会出现问题.

另外请注意,创建AAR的模块包含本机代码.

android firebase android-gradle-plugin aar

6
推荐指数
0
解决办法
543
查看次数

将AndroidX库包含到Unity项目中

运行Unity应用程序时,我遇到了类错误。我有一个本机代码库,我将其编写为aar。我刚刚更新了一些代码来支持Android 8上的本地通知,并且使用了Android X“ Worker”类。我的aar编译正常,但我想我缺少要包含在Unity项目中的库。我应该添加哪个库?

错误是

06-05 10:57:52.970: E/AndroidRuntime(21759): FATAL EXCEPTION: IntentService[com.help.stressfree.localnotifications.NotificationService]
06-05 10:57:52.970: E/AndroidRuntime(21759): Process: com.help.stressfree, PID: 21759
06-05 10:57:52.970: E/AndroidRuntime(21759): java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/work/Data$Builder;
06-05 10:57:52.970: E/AndroidRuntime(21759):    at com.help.stressfree.localnotifications.NotificationService.ScheduleNotification(NotificationService.java:99)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at com.help.stressfree.localnotifications.NotificationService.onHandleIntent(NotificationService.java:82)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.os.Handler.dispatchMessage(Handler.java:105)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.os.Looper.loop(Looper.java:164)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.os.HandlerThread.run(HandlerThread.java:65)
06-05 10:57:52.970: E/AndroidRuntime(21759): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.work.Data$Builder" on path: DexPathList[[zip file "/data/app/com.help.stressfree-FN_ED1fyI9LY4tcsB1RWqQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.help.stressfree-FN_ED1fyI9LY4tcsB1RWqQ==/lib/arm, /data/app/com.help.stressfree-FN_ED1fyI9LY4tcsB1RWqQ==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
06-05 10:57:52.970: E/AndroidRuntime(21759):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
06-05 …
Run Code Online (Sandbox Code Playgroud)

android unity-game-engine aar androidx

6
推荐指数
1
解决办法
1580
查看次数