2014-08-30 48 views
5

Bir java kitaplığı 'çekirdek' (myLibrary-core) kullanan bir android kitaplığı oluşturmaya çalışıyorum. Sorunlarım, oluşturulan pom dosyasımda görünmesi için bağımlılıklarımı almamı sağladı ancak bu soruya verilen yanıtı kullanarak onu düzelttim (düşünüyorum): Gradle not including dependencies in published pom.xmlBir uygulamada benim android kitaplığı alma kitaplığı olarak tanınmıyor

Kitaplığımı neden içe aktardığımı çözmeye çalışıyorum. ayrı bir uygulama bu hatayı verir.

<?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> 
: Bu pom dosyası oluşturur

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) 
       } 
      } 
     } 
    } 
} 

} 

: Bu benim build.gradle olduğunu

Error:Module version com.example:myLibrary:0.1.0 depends on libraries but is not a library itself 

: Ben gradle bağımlılık olarak bir projeye kütüphane aldığınızda, bu alıyorum hatadır

Tek sorun, play-services, support-v13 ve appcompat-v7'yi kaldırırsam hata gider. Denemek için başka bir şey düşünemiyorum, bu yüzden yaptığınız herhangi bir öneriyi denemekten mutluluk duyuyorum.

+0

Bunu eclipse adt ile nasıl yapacağımı biliyorum. her bir projeye alt girişi girin. Kütüphane islibary ve diğer proje kütüphane projesini tıklatır. – danny117

+0

@ danny117 Bu durum benim durumumla ilgili görünmüyor. Pom dosyası düzgün bir şekilde üretildi mi ve kütüphane projenizi bir uygulamada gradle ile içe aktarabilirsiniz. – jonalmeida

+0

Aslında sadece tutulma için tek yöntemi biliyorum. Android stüdyosu beta olduğunda ben ona bakacağım. Bir kütüphane projesi için Android Studio'yu bir araya getirerek bir göz atın. http://developer.android.com/sdk/installing/studio-build.html – danny117

cevap

7

Android eklentisi POM bağımlılıklarını tüketemez; Sadece JAR veya AAR kütüphaneleri ile ilgilenebilir. Bunun anlamı şudur: com.example:myLibrary kütüphanelere bağlıdır (appcompat-v7, myLibrary-core, support-v13 ve play-services) ancak bir kütüphane değildir (Android Gradle eklentisi <packaging>pom</packaging> ile ilgilenmez).

Android-Gradle, bağımlılıklarını gidermek için modülün .pom dosyasını sindirdiğinden ve ambalajı olarak kullanan kitaplıklarla ilgilenemediği için kafa karıştırıcı olduğunu biliyorum.

Android Gradle eklentisi tarafından tüketilebilecek bir modül oluşturmak isterseniz, JAR veya AAR olarak paketlenmiş olması gerekir.

+0

Teşekkürler Scott! Bu durumda kütüphanemi nasıl paketlediğimi yeniden düşünmek zorundayım. – jonalmeida

+0

Bu büyük bir sınırlama değil mi? Yani, muhtemelen kütüphanelerin% 90'ı başka bir kütüphaneye bağımlı olacak. Yoksa bir şey mi özlüyorum? –

+0

Gradle derleme sisteminde bir Android kütüphaneniz varsa (basit bir Java kütüphanesi değil, Android API'lerini kullanan ve Android kaynaklarını barındıran ve eserler oluşturan), yalnızca JAR veya AAR olarak paketlenmiş diğer kütüphanelere güvenebilirsiniz. Bu ciddi bir sınırlama gibi görünmüyor; JAR oldukça standarttır ve AAR, Android kitaplıklarının Gradle derlemelerinden paketlenmesinin yoludur. Eğer apklib'i de destekliyorsa iyi olur, ama bu pek olası görünmüyor. –

İlgili konular