Articles of gradle

Gradle(android实验插件)忽略项目依赖

我在以下项目结构中使用Gradle Android实验插件: Root Project |– app |– my-library settings.gradle include ‘:my-library’, ‘:app’ 的build.gradle buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle-experimental:0.2.0’ } } allprojects { repositories { jcenter() } } 应用程序/的build.gradle apply plugin: ‘com.android.model.application’ model { android { compileSdkVersion = 23 buildToolsVersion = “23.0.0” defaultConfig.with { applicationId = “a.bundle.id” minSdkVersion.apiLevel = 15 targetSdkVersion.apiLevel […]

如何使用Android Gradle Plugin 3.0.0+操作Variant输出?

Gradle的Android插件的最新版本(3.0.0)打破了用于操作变体输出的 API。 此API用于处理在构建期间创建的文件(例如AndroidManifest.xml),并且已被删除以改善配置时间。 哪些新API可用于操作变体输出,它们与2.X API有何不同?

Gradle flavors和main中重复类的解决方法

问题: 我想我的问题很常见。 我有一个相当大的gradle代码库,我使用产品风格生成自定义版本。 这些产品风格通常需要src\main\java的一个或多个类的自定义版本。 我已阅读Gradle文档,并且在查看同一问题时也遇到了以下问题: 使用Build Flavors – 正确构建源文件夹和build.gradle 为同一类的不同版本构建风味 我理解为什么你不能在src\main\java和你的风格中定义相同的类,但是将类从src\main\java到你的产品风格的解决方案有一个相当大的缺点。 当您将类从src\main\java到最新版本以进行自定义时,您还需要将该类的原始非自定义版本的副本移动到其他所有以前的产品风格中,否则它们将不再构建。 您可能只需要每次从原始文件调整一个或两个不同的类(然后必须将这些类重新分配到flavor目录),但随着时间的推移,将构建移动的类的数量以及src\main\java保留的数量src\main\java将在每次必须执行此操作时减少。 最终大多数类都会有各种风格(即使大部分都是原始文件的副本),而src\main\java几乎是空的,有点打败了整个Gradle构建结构的目的。 此外,你需要保持一个“默认”的味道,你可以克隆每次开始一个新的味道,所以你知道你从原始代码库开始所有类。 我的初步解决方法: 使用BuildConfig中的字段来定义是否应该使用自定义类: buildConfigField ‘boolean’, ‘CUSTOM_ACTIVITY_X’, ‘true’ 然后,您可以使用以下代码: final Intent intent = new Intent(); … if (BuildConfig.CUSTOM_ACTIVITY_X) { intent.setClass(ThisActivity.this, CustomActivityX.class); } else { intent.setClass(ThisActivity.this, DefaultActivityX.class); } startActivity(intent); 每种风味仍然需要一个副本CustomActivityX,但它可以只是一个虚拟空类,你知道它不会被使用。 这意味着您的默认版本的类始终保留在src\main\java 。 改进的解决方法: 在试图摆脱对其他所有风格的虚拟CustomActivityX的需求时,我已经看过使用Class.forName() 。 例如: final Class activityX; if (BuildConfig.CUSTOM_ACTIVITY_X) { try […]

Gradle和Android:具有多个Maven工件出版物的pom配置

在使用Gradle(v 1.7)作为构建工具的Android库上工作时,我使用了maven插件并配置了任务uploadArchives,以将lib的发布和调试版本发布到本地maven存储库。 以下代码可以正常工作: // […] apply plugin: ‘android-library’ // […] nothing unusual /* * Define name of the apk output file (build/apk/) */ android.libraryVariants.all { variant -> def outputName = “MyModule-${android.defaultConfig.versionName}-${variant.baseName}.aar” variant.outputFile = new File(“$buildDir/libs”, outputName) } /* * Publish to maven local repo (older style maven plugin) * Used while android plugin is not […]

使用Android Studio和Gradle进行unit testing?

如何轻松地在Android Studio(IntelliJ)中为我的Android项目添加unit testing? 更确切地说:我想添加一个包含测试代码的文件夹(JUnit 4),并使用常规安装的JDK(不在Android模拟器中)从那里执行unit testing。 到目前为止,我将文件夹’test / java /’添加到我的模块中,并将’test’添加为源集,将junit添加为测试依赖项: sourceSets { instrumentTest.setRoot(‘src/test’) } dependencies { instrumentTestCompile ‘junit:junit:4.+’ // … } 当我现在在test / java文件夹中选择Run’All Tests’时,它会给我一个UnsupportedOperationException。 我错过了什么? 你如何运行Android项目的unit testing? 对于插件的建议的加分点,其工作方式类似于Eclipse中的“Infinitest” – 我可以简单地保存一个类,并自动执行unit testing。 🙂 PS:我不想使用https://github.com/JakeWharton/gradle–android-test-plugin,因为该插件似乎已被弃用。

如何在另一个模块的androidTest目录中使用代码

我在AndroidStudio项目中添加了两个模块: app-base | |—-src |____androidTest |________MyTestBase.java app | |—-src |____androidTest |________MyTest.java 一些常见的测试类在app-base的androidTest中定义,并在app’androidTest中使用。 我试图在app的build.gradle中添加以下代码: evaluationDependsOn(‘:app-base’) compile project(‘:app-base’) androidTestCompile project(‘:app-base’) 我在settings.gradle中包含了app-base和app, gradlew项目的输出是: Root project ‘MyProject’ +— Project ‘:app-base’ +— Project ‘:app’ 通过这种方式没有编译错误,但是当我在ide中运行MyTest时,它表示找不到类MyTestBase。 你知道什么是错的吗? 任何想法都表示赞赏。 谢谢。

如何使用deviceCheck任务在远程设备上运行测试

在http://tools.android.com/tech-docs/new-build-system/user-guide上 ,定义了以下任务: 汇编组装项目输出的任务 检查运行所有检查的任务。 connectedCheck运行需要连接设备或仿真器的检查。 它们将并行运行在所有连接的设备上。 deviceCheck使用API​​运行检查以连接到远程设备。 这用于CI服务器。 build此任务同时进行组装和检查 clean此任务清除项目的输出 我现在正在设置一个Jenkins CI来运行我的(Espresso)测试,而deviceCheck任务描述似乎与此相关。 但我找不到任何有关如何在CI服务器上使用此任务来执行远程设备上的测试的文档或示例。 有谁知道如何使用它?

Gradle:无法创建AppPlugintypes的插件

我似乎无法使用Gradle构建我的Android应用程序。 的build.gradle: buildscript { repositories { mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:0.6.+’ } } apply plugin: ‘android’ repositories { mavenCentral() } dependencies { compile ‘com.intellij:annotations:12.0’ } android { compileSdkVersion 19 buildToolsVersion “19” defaultConfig { minSdkVersion 14 targetSdkVersion 19 versionCode = 82 versionName = “0.6.1” } sourceSets { main { manifest.srcFile ‘AndroidManifest.xml’ java.srcDirs = [‘src’] resources.srcDirs […]

Gradle:如何在Android版本中包含来自依赖java项目的本地jar?

在我的Android应用程序中,当执行引用依赖.jar中的代码的代码时,我得到一个java.lang.NoClassDefFoundError 。 我的项目包括一个Android模块以及一个仅限java的库模块,这是jar依赖项所在的模块。 我正在使用gradle 1.10来构建项目。 这是我的项目布局: myProject – app (Android) – src – build.gradle – lib (java) – src – libs – local-dependency.jar – build.gradle – build.gradle – settings.gradle 主项目build.gradle为空,而主项目settings.gradle如下所示: include ‘:app’, ‘:lib’ Android应用build.gradle看起来像: buildscript { repositories { mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:0.8.+’ } } apply plugin: ‘android’ repositories { mavenCentral() } android { […]

Android Annotations / Gradle / Android Studio构建问题

我正在努力将项目迁移到Android Studio / Gradle,我在使用Android Annotations正确构建项目时遇到了一些问题。 从gradle控制台输出看起来,编译后会发生注释处理吗? 是对的吗? 不应该以前发生吗? 奇怪的是,如果我点击运行,则会出现“编辑配置”对话框,底部显示“错误:未find默认活动”。 我有另一个项目使用一个非常相似的build.gradle文件,它运行正常,我完全被这个问题困住了。 任何帮助将非常感谢! 请注意我也尝试过各种其他方法,包括https://github.com/excilys/androidannotations/wiki/Building-Project-Gradle,但结果没有区别。 我在项目根目录中的build.gradle: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:0.7.+’ } } allprojects { repositories { mavenCentral() } } 和我的/ android文件夹中的build.gradle: apply plugin: ‘android’ ext.androidAnnotationsVersion = ‘2.7.1’; configurations […]