2013-07-06 14 views
5

Ho utilizzato questo tutorial per educare me stesso su come costruire APK fuori Eclipse da solo utilizzando riga di comando (e Ant) - http://www.androidengineer.com/2010/06/using-ant-to-automate-building-android.htmlCostruire APK con Gradle IDE esterno (migrazione da Ant)

Ora che sistema di compilazione spostandomi verso Gradle mi piacerebbe avere un tutorial avanzato simile per riferimento. La maggior parte delle esercitazioni disponibili (like this one) si occupano solo di cose di base, ma mi piacerebbe sapere come eseguire alcune cose "avanzate" come la sostituzione automatica dei valori nel codice durante la compilazione (in modo da poter avere più varianti di APK).

risposta

4

esempi standard fornite da Google sono qui

http://tools.android.com/tech-docs/new-build-system/gradle-samples-0.4.2.zip?attredirects=0&d=1

Per modificare automaticamente i valori in uso codice della classe BuildConfig. Gli esempi sono nel link sopra.

varianti sono spiegati qui http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants

UPDATE

come questo esempio ottiene po 'stantio Ecco pasetbin alla versione più recente http://pastebin.com/FmcCZwA5

differenza principale è il supporto Robolectric fornito da plug-in, e supporto alle librerie inverosimile dal repository SDK interno

Versione precedente

Meno esempio di base con Robolectric e AndroidAnnotations

Uso nesso

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath 'com.android.tools.build:gradle:0.4' 
    } 
} 

apply plugin: 'android' 

repositories { 
    mavenCentral() 
    maven { 
    url 'https://oss.sonatype.org/content/repositories/snapshots/' 
    } 
} 

processore uso AndroidAnnotation, test locali Robolectric e Jackson

configurations { 
    compile 
    testLocalCompile.extendsFrom(compile) 
    androidannotations.extendsFrom(compile) 
} 

dependencies { 
    compile files('libs/android-support-v4.jar') 
    compile 'org.androidannotations:androidannotations-api:3.0-SNAPSHOT' 
    compile 'com.github.japgolly.android:svg-android:2.0.3' 
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.12' 
    testLocalCompile 'junit:junit:4.8.2' 
    testLocalCompile 'org.robolectric:robolectric:2.2-SNAPSHOT' 
    testLocalCompile 'com.google.android:android:4.0.1.2' 
    testLocalCompile 'com.google.android:support-v4:r6' 
    testLocalCompile 'org.roboguice:roboguice:2.0' 
    androidannotations 'org.androidannotations:androidannotations:3.0-SNAPSHOT' 
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

Configurazione test strumentazione standard

defaultConfig { 
    minSdkVersion 7 
    targetSdkVersion 16 
    testPackageName "com.mypackage.myapp.test" 
    testInstrumentationRunner "com.maypackage.myapp.test.Runner" 
    } 
} 
processore

Invoke AndroidAnnotations su tutte le varianti

afterEvaluate { project -> 
    android.applicationVariants.each { variant -> 
    variant.javaCompile.options.compilerArgs += [ 
      '-classpath', configurations.compile.asPath, 
      '-processorpath', configurations.androidannotations.asPath, 
      '-processor', 'org.androidannotations.AndroidAnnotationProcessor', 
      '-AandroidManifestFile=' + variant.processResources.manifestFile 
    ] 
    } 
} 

Definire sourcesets per i test locali Robolectric

sourceSets { 
    testLocal { 
    java.srcDir file('src/test/java') 
    resources.srcDir file('src/test/resources') 
    } 
} 

test Robolectric locali compito

task localTest(type: Test, dependsOn: assemble) { 
    testClassesDir = sourceSets.testLocal.output.classesDir 

    android.sourceSets.main.java.srcDirs.each { dir -> 
    def buildDir = dir.getAbsolutePath().split('/') 
    buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') 

    sourceSets.testLocal.compileClasspath += files(buildDir) 
    sourceSets.testLocal.runtimeClasspath += files(buildDir) 
} 

classpath = sourceSets.testLocal.runtimeClasspath 

}

Run Robolectric in modalità debug

localTest.doFirst { 
    jvmArgs '-Xdebug', 
     '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005' 
}