在应用程序中导入我的android库不是';我不被认为是图书馆
我正在尝试构建一个使用java库“核心”(myLibrary core)的android库。我在使依赖项显示在生成的pom文件中时遇到了问题,但我(认为我)使用此问题的答案修复了它: 我现在正试图解决为什么将我的库导入到单独的应用程序中会出现此错误。这是我在将库作为渐变依赖项导入项目时遇到的错误:在应用程序中导入我的android库不是';我不被认为是图书馆,android,maven,gradle,android-studio,Android,Maven,Gradle,Android Studio,我正在尝试构建一个使用java库“核心”(myLibrary core)的android库。我在使依赖项显示在生成的pom文件中时遇到了问题,但我(认为我)使用此问题的答案修复了它: 我现在正试图解决为什么将我的库导入到单独的应用程序中会出现此错误。这是我在将库作为渐变依赖项导入项目时遇到的错误: Error:Module version com.example:myLibrary:0.1.0 depends on libraries but is not a library itself 这
Error:Module version com.example:myLibrary:0.1.0 depends on libraries but is not a library itself
这是我的身材。格雷德尔:
apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.library'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
}
}
apply plugin: 'maven-publish'
group = 'com.example'
version = '0.1.0'
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
applicationId "com.example.android"
minSdkVersion 11
targetSdkVersion 19
versionCode 1
versionName "0.1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/DEPENDENCIES'
}
}
dependencies {
// compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:20.0.0'
compile 'com.example:myLibrary-core:0.1.2'
compile 'com.android.support:support-v13:20.0.0'
compile 'com.google.android.gms:play-services:+'
}
// build JAR file
task androidReleaseJar(type: Jar, dependsOn: assembleRelease) {
from "$buildDir/intermediates/classes/release/"
}
publishing {
publications {
maven(MavenPublication) {
artifact androidReleaseJar {
classifier "sources"
}
//The publication doesn't know about our dependencies, so we have to manually add them to the pom
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
//Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each
configurations.compile.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
}
apply插件:“android sdk管理器”
应用插件:“com.android.library”
构建脚本{
存储库{
mavenCentral()
}
依赖关系{
classpath'com.android.tools.build:gradle:0.12.+'
classpath'com.jakewharton.sdkmanager:gradle插件:0.12.+'
}
}
应用插件:“maven发布”
组='com.example'
版本='0.1.0'
安卓{
编译DK19版
buildToolsVersion“19.1.0”
默认配置{
applicationId“com.example.android”
明斯克版本11
targetSdkVersion 19
版本代码1
版本名称“0.1.0”
}
建筑类型{
释放{
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard rules.pro'
}
}
包装选项{
排除“META-INF/许可证”
排除“META-INF/通知”
排除“META-INF/LICENSE.txt”
排除“META-INF/NOTICE.txt”
排除“META-INF/依赖项”
}
}
依赖关系{
//编译文件树(目录:“libs”,包括:['*.jar'])
编译'com.android.support:appcompat-v7:20.0.0'
编译'com.example:myLibrary core:0.1.2'
编译'com.android.support:support-v13:20.0.0'
编译'com.google.android.gms:play services:+'
}
//构建JAR文件
任务androidReleaseJar(类型:Jar,dependsOn:assembleRelease){
从“$buildDir/mediates/classes/release/”开始
}
出版{
出版物{
maven(maven出版物){
人工制品androidReleaseJar{
分类器“源”
}
//出版物不知道我们的依赖项,因此我们必须手动将它们添加到pom中
pom.withXml{
def dependenciesNode=asNode().appendNode('dependencies'))
//迭代编译依赖项(我们不需要测试依赖项),为每个依赖项添加一个节点
configurations.compile.allDependencies.each{
def dependencyNode=dependenciesNode.appendNode('dependency'))
dependencyNode.appendNode('groupId',it.group)
dependencyNode.appendNode('artifactId',it.name)
dependencyNode.appendNode('version',it.version)
}
}
}
}
}
}
这将生成pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myLibrary</artifactId>
<version>0.1.0</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>appcompat-v7</artifactId>
<version>20.0.0</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>myLibrary-core</artifactId>
<version>0.1.2</version>
</dependency>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>support-v13</artifactId>
<version>20.0.0</version>
</dependency>
<dependency>
<groupId>com.google.android.gms</groupId>
<artifactId>play-services</artifactId>
<version>+</version>
</dependency>
</dependencies>
</project>
4.0.0
com.example
我的图书馆
0.1.0
聚甲醛
com.android.support
appcompat-v7
20.0.0
com.example
我的图书馆核心
0.1.2
com.android.support
支持-v13
20.0.0
com.google.android.gms
游戏服务
+
奇怪的是,如果我删除play服务、support-v13和appcompat-v7,错误就会消失。我想不出还有什么可以尝试的,所以我很乐意尝试任何建议。Android插件不能使用POM依赖项;它只能处理JAR或AAR库。这就是它的意思:
com。例如:myLibrary
依赖于库(appcompat-v7、myLibrary核心、support-v13和play服务),但不是库本身(Android Gradle插件不处理pom
)
我知道这很让人困惑,因为Android Gradle消化了模块的.pom文件以解决其依赖性等问题,但它无法处理使用该文件作为包装的库
如果您想创建一个可以被Android Gradle插件使用的模块,那么需要将其打包为JAR或AAR。我知道如何使用eclipse adt实现这一点。在每个项目上输入alt。Library单击IsLibrary,而其他项目则单击Library项目。@danny117这似乎与我的情况无关。pom文件是否正确生成,并且您可以通过gradle在应用程序中导入库项目?我实际上只知道eclipse的一种方法。当android studio退出测试版时,我会看看它。看看这里为一个图书馆项目设置gradle with Android Studio。我想你还没有理解我的问题……我知道我实际上对gradle maven的构建很弱。我只是想帮忙。祝库导入顺利。呃,IDE是什么,或者你在自动夜间构建服务器上的构建是什么。谢谢Scott!在这种情况下,我必须重新考虑如何打包我的库。这是一个巨大的限制,对吗?我的意思是,可能90%的图书馆会依赖于另一个图书馆。或者我遗漏了什么?如果在Gradle构建系统中有一个Android库(不是一个普通的Java库,而是一个使用Android API并包含Android资源和构建artfiacts的库),那么它只能依赖其他打包为JAR或AAR的库。这似乎不是一个严重的限制;JAR是相当标准的,AAR是从Gradle构建打包Android库的方式。如果它也能支持apklib就好了,但这似乎不太可能。我相信@AlexDean的意思是,与maven的工作方式相比,它似乎是有限的,maven的工作方式允许您定义依赖项,并在构建它之前将它们从存储库中取下,而不是打包您使用的每个库。