在IDE外部使用Gradle构建APK(从Ant迁移)

我一直在使用本教程来教育自己如何通过使用命令行(和Ant)在Eclipse外部构建APK – http://www.androidengineer.com/2010/06/using-ant-to-automate-building- android.html

现在构建系统将转向Gradle我希望有类似的高级教程供参考。 大多数教程( 像这一个 )只涉及基本的东西,但我想知道如何执行一些“高级”的东西,比如在构建期间自动替换代码中的值(这样我就可以拥有多个APK版本)。

Google提供的标准示例就在这里

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

要在代码中自动更改值,请使用BuildConfig类。 示例在上面的链接中。

变体在这里解释http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants

UPDATE

因为这个例子在这里有点陈旧是pasetbin到更新的版本http://pastebin.com/FmcCZwA5

主要区别是插件提供的Robolectric支持,以及从SDK内部存储库获取的支持库

旧版本

Robolectric和AndroidAnnotations的基本示例

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

使用AndroidAnnotation处理器,Robolectric本地测试和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" 

配置标准检测测试

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

在所有变体上调用AndroidAnnotations处理器

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

定义Robolectric本地测试的源集

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

本地Robolectric测试任务

 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 

}

在调试模式下运行Robolectric

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