我有一个android库项目(称为my-lib),它在build.gradle
文件中使用以下技巧生成AAR和JAR:
android.libraryVariants.all { variant ->
def name = variant.buildType.name
def task = project.tasks.create "jar${name.capitalize()}", Jar
task.dependsOn variant.javaCompile
task.from variant.javaCompile.destinationDir
artifacts.add('archives', task);
}
这个库项目不包含Android资源,并且生成了一个JAR以方便其他一些不使用maven或Gradle的系统使用。Android应用程序在他们的gradle文件中声明他们依赖于这个Android库,比如在他们的gradle文件中:
dependencies {
compile 'com.mycompany:my-lib:VERSION'
}
但是这些android应用程序选择的是JAR文件而不是AAR,因此错过了AAR中的proguard.txt
文件,该文件是使用库gradle文件中的声明放置在那里的:
android {
buildTypes.all {
consumerProguardFiles 'proguard-rules.pro'
}
}
android gradle插件生成的pom文件缺少packaging
条目,它只是如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>my-lib</artifactId>
<version>VERSION</version>
</project>
packaging
条目应该指定AAR
,以便其他项目获得AAR而不是JAR,但是我如何做到这一点呢?也许有一种方法可以产生一个不同名称的罐子,这样它就不会与AAR冲突了?
更新:
我不能在所有依赖项中指定@aar
,因为有些依赖项是使用实现项目(':my-lib')
指定项目的库,而gradle在那里不接受@aar
。然后,当我尝试将依赖项添加到应用程序时,我得到了这个错误:d8:Program type已经存在
带有在my-lib中的类的名称。我确保我的所有依赖项都是通过implementation
而不是compile
引用my-lib,并且我看到在依赖库的中间POM文件中,引用如下所示:
<dependency>
<groupId>mycompany</groupId>
<artifactId>my-lib</artifactId>
<version>1</version>
<scope>runtime</scope>
</dependency>
所以运行时范围似乎是正确的。
我正在使用https://github.com/dcendents/android-maven-gradle-plugin/plugin将这个库发布到我的本地maven缓存中,这样在不同git repos中的许多其他Android应用程序就可以访问这个Android库。这将出现在我的库build.gradle文件的顶部:
apply plugin: 'com.android.library'
apply plugin: 'android-maven'
group = 'com.mycompany'
version = '1'
repositories {
mavenLocal()
}
由于Gradle Android Maven插件是标准Maven插件的修改,根据文档,您可以尝试以下操作:
uploadArchives {
repositories {
mavenDeployer {
pom.packaging = 'aar'
}
}
}
问题内容: 我看到了类似的问题,但未找到可接受的答案。问题-我有一些小功能我自己的android库。我的库使用其他库-fe Hawk(无sql数据库)。我的图书馆gradle文件: 图书馆工作正常。如果我将它用作另一个项目中的项目-它也可以工作。但是当我生成文件(带有-> )并包含到单独的项目中时-失败。项目仅查看我的图书馆的班级。Hawk com.orhanobut.hawk软件包和off其他软
我使用的是Android Studio1.4
问题内容: 摘要: 我有一个依赖于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码。 细节: 我有一个Java SDK库项目,其中包含我们用于Java Web项目的代码,此类库是使用内部Nexus服务器(如JAR)创建的,并驻留在内部。 目的是通过一个AAR库提供此JAR库的“ Android配置”版本,多个Android应用程序可以使用该版本,并最大程度地减少了实现它的工作量(和
摘要: 我有一个AAR文件,它依赖于一个JAR文件,当我构建AAR项目时,它不包含JAR代码。 我的AAR项目包含了Java SDK库(JAR)的gradle依赖项,但在构建时,AAR不包含来自它的任何类。 代码: 这是Java SDK项目的gradle文件: 注意2:我尝试在Android项目中添加到我的AAR依赖项,但这没有解决任何问题,真正的问题是在构建AAR项目时,JAR项目代码没有被捆绑
我写了一些库,其中有一部分UI。此外,这个库使用另一个库。我想提供发行版来在任何应用程序中使用这部分UI。 我得库有下一个依赖项: /home/user/projects/mainapp/app/build/intermediates/explodede-aar/com.my.sdk/sdk/0.0.1/res/values/values.xml:78:21-29:找不到与给定名称匹配的资源:at
问题内容: 当喜欢过? 何时以及何时使用哪种数据结构: 您想要高效的读写 应该具有更少的内存占用 尽管存在类似的问题,但它并没有突出表明应该优先选择哪个事实? 问题答案: 蜘蛛侠鲍里斯(Boris the Spider)已经概述了和之间最明显的区别-前者始终是有界的,而后者可以是无界的。 因此,如果您需要无限制的阻塞队列,或者将其用作工具箱中的最佳选择。 但是,假设您需要一个有限的阻塞队列。最后,