2015-02-03 13 views
5

In meinem Multi-Modul Android Studio-Projekt möchte ich ein einfaches Java-Modul erstellen. Aber in diesem Modul möchte ich auch bestimmte Android API verwenden können. Ist das möglich? Wenn ja, wie sollte Build.gradle aussehen?Ist es möglich, ein einfaches Java-Bibliotheksmodul abhängig von android SDK in Android Studio zu haben

Dank jia

+0

Was ist der Wert bei der Erstellung eines "plain java module", in diesem Fall über ein Bibliotheksprojekt? Schließlich können Sie dieses Java-Modul nur in einer Android-App verwenden. – CommonsWare

+0

Dies ist nicht für Standard-Telefon-App, sondern für benutzerdefinierte Hardware gedacht. Wir möchten in der Lage sein, den gleichen Krug unter mehreren Anwendungen auf dem Gerät zu teilen. – mr49

Antwort

6

Solange die Android-Funktionalität, die Sie in einem Glas benötigen anstelle eines aar ist, dann sollten Sie in der Lage sein, dies zu tun, ziemlich leicht, wie mein Team ein paar Artefakte wie diese hat. Für Android jar Artefakte in Maven Central, brauchen Sie nur die Abhängigkeit hinzuzufügen:

compile 'com.google.android:android:4.1.1.4' 

Wenn die Funktionalität in einer der Artefakte ist über den Android SDK Manager installiert haben, dann können Sie nur die Abhängigkeit, wie oben hinzufügen, aber Sie werden die lokalen Android Repo hinzufügen müssen, um die Artefakte ziehen:

maven { url "file:///${System.env.ANDROID_HOME}/extras/android/m2repository" } 

bearbeiten

auch vergessen zu erwähnen, sollten Sie die Android-Artefakte markieren, wie vorgesehen, so dass Sie don‘ t bekommen dep Abhängigkeitskonflikte. Sie können das tun, indem Sie die folgenden ein:

configurations { 
    provided 
    compile.extendsFrom provided 
} 
dependencies { 
    provided('com.google.android:android:4.1.1.2') 
} 

Lassen Sie mich wissen, wenn Sie ein Beispiel build.gradle brauchen und ich werde hinzufügen.

Edit 2

Unten ist ein Beispiel build.gradle, die wir für eines unserer Projekte verwenden.

apply plugin: 'java' 
apply plugin: 'maven' 
apply plugin: 'pmd' 
apply plugin: 'jacoco' 
apply plugin: 'findbugs' 
apply plugin: 'project-report' 
apply plugin: 'jxr' 

group = 'com.example' 
archivesBaseName = 'project-name' 
version = '1.0.0-SNAPSHOT' 
sourceCompatibility = 1.7 

configurations { 
    provided 
    compile.extendsFrom provided 
} 

buildscript { 
    repositories { 
     maven { url 'http://repo1.maven.org/maven2/' } 
     maven { url "http://jcenter.bintray.com" } 
    } 

    dependencies { 
     classpath('net.davidecavestro:gradle-jxr-plugin:0.1') 
    } 
} 

repositories { 
    mavenCentral() 
    if (project.hasProperty("mavenLocal")) { 
     maven { url "${System.env.HOME}/.m2/repository" } 
    } 
    maven { url "file:///${System.env.ANDROID_HOME}/extras/android/m2repository" } 
} 

dependencies { 
    compile('com.google.code.findbugs:annotations:2.0.2') 
    compile('com.google.code.gson:gson:2.2.4') 
    compile('com.google.guava:guava:15.0') 
    provided('com.google.android:android:4.0.1.2') 
    testCompile('commons-io:commons-io:2.4') 
    testCompile('junit:junit:4.11') 
    testCompile('org.robolectric:robolectric:2.3') 
    testCompile('org.mockito:mockito-all:1.10.8') 
} 

test { 
    dependsOn ':assemble' 
    testLogging { 
     showExceptions = true 
     showStackTraces = true 
     exceptionFormat = "full" 
     events "passed", "skipped", "failed" 
    } 
} 

javadoc { 
    source = sourceSets.main.allJava 
    classpath = test.classpath 
} 

jacocoTestReport { 
    dependsOn test 
    description = "Generate Jacoco coverate reports after running tests." 
    reports { 
     xml.enabled false 
     csv.enabled false 
     html.destination "${buildDir}/reports/jacoco" 
    } 
} 

pmd.ignoreFailures = true 
pmdTest.enabled = false 
pmdMain.enabled = true 
pmdMain { 
    reports { 
     xml.enabled = false 
     html.enabled = true 
    } 
} 

findbugs.ignoreFailures = true 
findbugs.excludeFilter = file('./findbugs-exclude-filter.xml') 
findbugsTest.enabled = false 
findbugsMain.enabled = true 
findbugsMain { 
    reports { 
     xml.enabled = false 
     html.enabled = true 
    } 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.1' 
    distributionUrl = "http://services.gradle.org/distributions/gradle-${gradleVersion}-all.zip" 
} 

task sourcesJar(type: Jar) { 
    classifier = 'sources' 
    from sourceSets.main.allSource 
} 

task javadocJar(type: Jar) { 
    classifier = 'javadoc' 
    from "${projectDir}/build/docs" 
} 

artifacts { 
    archives sourcesJar 
    archives javadocJar 
} 

uploadSite.dependsOn(':check') 
check.dependsOn('sourcesJar') 
check.dependsOn('javadoc') 
check.dependsOn('jacocoTestReport') 
check.dependsOn('projectReport') 
check.dependsOn('jxr') 
+0

Bradford2000, würde ein Beispiel build.gradle sehr geschätzt werden. Ich bin ziemlich neu in Android und Java Build-Tools. – mr49

+0

In meinem Fall verwenden wir Android 4.2.2, die nicht in Maven Central ist. Und der SDK-Manager scheint es auch nicht in das lokale m2repository-Verzeichnis geschrieben zu haben. – mr49

+1

Ich glaube nicht, dass die Versionen von com.google.android:android mit den Android OS-Versionen übereinstimmen. Die neueste Version, die in Maven Central oder jCenter verfügbar ist, ist 4.1.1.4. – Bradford2000

Verwandte Themen