2015-02-03 11 views
5

Nel mio progetto di Studio multi-modulo Android, vorrei creare un semplice modulo java. Ma in quel modulo, voglio anche essere in grado di utilizzare determinate API Android. È possibile? Se sì, come dovrebbe apparire build.gradle?È possibile avere un semplice modulo libreria java in base all'SDK Android in Android Studio

Grazie jia

+0

Qual è il valore nella creazione di un "modulo java semplice", su un progetto di libreria, in questo caso? Dopo tutto, non è possibile utilizzare quel modulo Java in qualcosa di diverso da un'app Android. – CommonsWare

+0

Questo non è pensato per l'app del telefono standard, ma per l'hardware personalizzato. Vogliamo essere in grado di condividere lo stesso jar tra più applicazioni sul dispositivo. – mr49

risposta

6

Finché la funzionalità di Android che vi serve è in un barattolo invece di un AAR, allora si dovrebbe essere in grado di farlo abbastanza facilmente come la mia squadra ha un paio di manufatti come questo. Per Android manufatti vaso in Maven centrale, è sufficiente aggiungere la dipendenza:

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

Se la funzionalità è in uno dei manufatti installati tramite il Gestore Android SDK, allora si può solo aggiungere la dipendenza come sopra, ma è necessario aggiungere il repo Android locale per tirare i manufatti:

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

Modifica

dimenticato anche parlare, ti consigliamo di segnare i manufatti Android come previsto in modo che don' t ottenere dep scontri di fine Potete farlo utilizzando il seguente:

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

fatemi sapere se avete bisogno di un esempio build.gradle e vorrei aggiungere uno.

Edit 2

seguito è riportato un esempio build.gradle che usiamo per uno dei nostri progetti.

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, un esempio di build.gradle sarebbe molto apprezzato. Sono abbastanza nuovo per gli strumenti di sviluppo Android e Java. – mr49

+0

Nel mio caso, stiamo usando Android 4.2.2 che non è in Maven centrale. E il gestore SDK non sembra averlo messo nella directory locale di riferimento di m2. – mr49

+1

Non penso che le versioni di com.google.android: android corrispondano alle versioni del sistema operativo Android. L'ultima versione disponibile in Maven Central o in jCenter è la 4.1.1.4. – Bradford2000

Problemi correlati