2013-07-06 9 views
5

Używam tego samouczka, aby kształcić się w jaki sposób budować APK poza Eclipse tylko przy użyciu linii poleceń (Ant) - http://www.androidengineer.com/2010/06/using-ant-to-automate-building-android.htmlbudynku APK z Gradle poza IDE (migracja z Ant)

teraz, że system budowania będzie przesuwać się w kierunku Gradle Chciałbym mieć podobny zaawansowany samouczek w celach informacyjnych. Większość tutoriali (like this one) zajmuje się tylko podstawowymi rzeczami, ale chciałbym wiedzieć, jak wykonać pewne "zaawansowane" rzeczy, takie jak automatyczna zamiana wartości w kodzie podczas kompilacji (dzięki czemu mogę mieć wiele wariantów APK).

Odpowiedz

4

standardowe przykłady świadczone przez Google tutaj

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

Dla automatycznie zmienia wartości w klasie BuildConfig użyć kodu. Przykłady znajdują się w powyższym linku.

Warianty są opisane tutaj http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants

UPDATE

jak ten przykład pobiera nieco nieświeże tu pasetbin do nowszej wersji http://pastebin.com/FmcCZwA5

Główną różnicą jest Robolectric Wsparcie udzielane przez wtyczki i wspierać biblioteki naciągane z wewnętrznego repozytorium SDK

Starsza wersja

Mniej prosty przykład z Robolectric i AndroidAnnotations

Zastosowanie nexus

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/' 
    } 
} 

procesorów użycie AndroidAnnotation, Robolectric lokalne i testy 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" 

Konfiguracja testy standardowe oprzyrządowanie

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

Invoke AndroidAnnotations procesor na wszystkie warianty

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

Definiowanie sourcesets dla Robolectric lokalnych testów

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

Lokalne Badania Robolectric zadanie

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 w trybie debugowania

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