Articles of gradle

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 […]

Android Studio 0.5.0 – 升级后无自动代码完成和错误语法识别器

在我开始编写代码之前,我将Android Studio升级到0.5.0没有任何问题。 这太奇怪了。 自动代码完成不再起作用。 没有显示下拉列表。 更糟糕的是,我故意写错了语法,但IDE无法自动警告,因为它仍然在滚动线(右侧)。 我确定我已经改成’com.android.tools.build:gradle:0.9.+’ 。 有帮助吗? 更新: 我想通了。 原因是,我不小心打开了File> Power Save Mode ,它阻止了自动完成,而不是因为Android Studio 0.5.0本身。

Android Studio – Gradle 1.5 – 核心库选项

我的Android项目和Gradle 1.5有问题。 我无法编译我添加的依赖项。 目前我正在开发一个Java EE应用程序,我想从我的Android设备执行EJB查find我运行的Wildfly10。 我知道,从Android设备进行查找可能不是最好的选择,REST Web服务会更好,但这不是重点。 在我的项目中,我添加了一个包含所有外部库的新模块,并将此模块添加到我的:app作为依赖于“编译”级别。 一切正常,直到我想添加jboss-client.jar。 在dex期间,他正在抱怨javax.transaction。*。 我现在做了什么 添加了multiDexEnabled为true 添加了preDexLibraries false 玩弄所有其他dex选项 我也试过这个: Android dx工具 这个: Android Studio忽略–core-library标志 并在Android Studio设置中设置–core-library标志 他们为什么不工作 解决方案:我在每个构建工具中修改了我的dx.bat ..没有改变。 它只是不起作用 解决方案:com.android.build.gradle.tasks.Dex未知(我不知道如何添加),Gradle 1.5不支持coreLibrary 解决方案:gradle完全忽略了 项目minSDK是19,targetSDK是23,使用构建工具23.0.2我从命令行调用了dx.bat,其参数与gradle相同,我只添加了–core-library arg,它可以工作! 但这并没有解决Android Studio和Gradle中的问题。 谁能帮帮我吗? 更新:好的,我看了一下com.android.dx.command.Main的源代码。 有一个公共内部类“Arguments”,它包含(显然)可以使用的参数,也包含coreLibrary = false。 现在我只需要知道如何修改它。 有人知道吗? 最好的问候,克里斯