Articles of gradle

Android + Gradle:设置动态archivesBaseName的最佳位置

在我们的Android项目中,我们希望APK的文件名包含日期,git分支名称和简短提交哈希等信息。 我们一直将它设置为defaultConfig一部分 android { defaultConfig { setProperty(“archivesBaseName”, “$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha”) } } 这在大多数情况下都可以工作,但是我们的构建有时会失败,错误指向值过时(例如在切换分支之后)。 在Android Studio中强制Gradle Sync通常会修复它。 那么,是否有更好,更强大的方法来确保财产保持最新并强制进行同步?

为什么我不能在构建脚本中使用gradle task connectedDebugAndroidTest?

我可以从我的构建脚本中引用connectedCheck任务(来自android插件): connectedCheck.finalizedBy AndroidShowTestResults 但是尝试使用connectedDebugAndroidTest (也来自android插件) connectedDebugAndroidTest.finalizedBy AndroidShowTestResults 给我 错误:(48,0)无法在项目’:app’上find属性’connectedDebugAndroidTest’。 如果我尝试 task connectedDebugAndroidTest << {print '123'} 它诅咒我 错误:无法添加任务’:app:connectedDebugAndroidTest’作为具有该名称的任务已存在。 我不明白为什么我不能参考connectedDebugAndroidTest ? 可用的gradle任务如下所示:

如何为@Nullable注释启用Android lint检查?

我注意到Android Studio将validation@Nullable是否未忽略@Nullable : 恩。 @Nullable MyObject getMyObject(); … MyObject o = getMyObject(); o.method(); ^ Method invocation ‘method’ may produce ‘java.lang.NullPointerException’ 这是由NullableProblems IntelliJ警告强制执行的。 我想通过lint规则在构建时从gradle强制执行此规则。 有没有人碰巧知道是否有可能通过gradle启用类似的东西?

在gradle插件中获取应用程序变体的包名称

我正在构建一个gradle插件,为每个应用程序变体添加一个新任务。 此新任务需要应用程序变体的包名称。 这是我目前的代码,它停止使用最新版本的android gradle插件: private String getPackageName(ApplicationVariant variant) { // TODO: There’s probably a better way to get the package name of the variant being tested. String packageName = variant.generateBuildConfig.packageName if (variant.processManifest.packageNameOverride != null) { packageName = variant.processManifest.packageNameOverride } packageName } 由于构建配置处理的更改,这已停止在最新版本的android插件中工作。 无论如何它似乎是一个黑客,所以我不会感到惊讶它停止工作。 是否有规范的方法来获取包名称?

无法解析不同风味android studio的方法’getAllUserGroupByName()’

考虑我在我的android项目中有两个产品风味名为’local’和’international’。 我只是给出了我的情况的骨架,所以请小心忽略其他错误。 考虑到我已经有不同的源集为不同的味道。 现在我的’本地’味道我只需要下面提到的一种方法。 // local flavor file interface UserDao { List getAllUser(); } 虽然在我的国际风格,我还需要额外的function,以使用户的名字也在一个组中。 所以有两种方法。 // international flavor file interface UserDao { List getAllUser(); List getAllUserGroupByName(); } 但问题是, 我正在调用该方法的单个活动。 当我从activity调用getAllUserGroupByName()方法时,如果当前flavor是’ international ‘,它将编译,但它不会在’ local ‘上编译,因为它不包含该方法。 我尝试通过如下条件包装来调用此方法, // BuildUtils is my helper class to get current flavor check easily. if (BuildUtils.isInternational()) { getAppDatabase().UserDao().getAllUserGroupByName(); } 但它也不起作用。 我不想要以下解决方案。 […]

如何告诉Gradle在命令行中使用不同的AndroidManifest?

我有一个多模块项目。 从我项目的根目录(包含多个模块)开始,我希望能够调用’gradle build’并让它在我的一个模块中使用不同的AndroidManifest,具体取决于我传入的一些参数。什么是最好的方法来完成这个? 我应该使用gradle.properties文件还是可以在settings.gradle文件中以某种方式指定不同的build.gradle? 任何帮助赞赏! settings.gradle: include ‘ActionBarSherlock’ include ” 的build.gradle: buildscript { repositories { mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:0.4.2’ } } apply plugin: ‘android’ dependencies { compile project(‘:ActionBarSherlock’) } android { buildToolsVersion “17.0” compileSdkVersion 17 sourceSets { main { manifest.srcFile ‘AndroidManifest.xml’ java.srcDirs = [‘src’] resources.srcDirs = [‘src’] aidl.srcDirs = [‘src’] renderscript.srcDirs = [‘src’] […]

将Google Play服务从8.4.0更新为9.2.1会导致Gradle同步错误

当我将Gradle文件中的Google Play依赖项从版本8.4.0更新到9.2.1时,出现以下错误: 错误:无法解决:com.google.android.gms:play-services-measurement:9.2.1 使用版本8.4.0时,这不是问题。 我试图将它作为一个明确的依赖包括在内但没有任何区别。 我正在使用的具体依赖项是: compile ‘com.google.android.gms:play-services-maps:9.2.1’ compile ‘com.google.android.gms:play-services-auth:9.2.1’ compile ‘com.google.android.gms:play-services-plus:9.2.1’ 对于为什么会发生这种情况有任何指示,我将不胜感激。

如何根据gradle风格设置variables

我想传递一个variablestest ,我将每种风格设置不同作为NDK的定义。 但由于某种原因,他总是传递最后一种味道的价值。 这是build.gradle: apply plugin: ‘com.android.library’ def test android { compileSdkVersion 23 buildToolsVersion “23.0.2” defaultPublishConfig “flavorARelease” publishNonDefault true defaultConfig { minSdkVersion 15 targetSdkVersion 17 ndk { moduleName “test” ldLibs “log” } } productFlavors { flavorA { test = 1 } flavorB { test = 2 } } buildTypes { debug { ndk { if […]

Gradle – 相当于android的test {}配置块

Gradle具有测试配置块 https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html “` apply plugin: ‘java’ // adds ‘test’ task test { // enable TestNG support (default is JUnit) useTestNG() // set a system property for the test JVM(s) systemProperty ‘some.prop’, ‘value’ // explicitly include or exclude tests include ‘org/foo/**’ exclude ‘org/boo/**’ // show standard out and standard error of the test JVM(s) on the […]

libs文件夹在android studio中不起作用

我正在使用Android studio 1.2 Beta 2的mac版本,建于2015年4月7日.Gradle版本2.2.1和Gradle插件版本1.1.0。 创建新项目后,默认情况下,我的app / build.gradle文件中存在以下代码。 … dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) } 这意味着我添加到app / libs目录的任何jar文件都应该加载到我的项目中,对吗? 但是,当我将Parse-1.9.0.jar添加到app / libs时,它没有被加载。 我没能在MainActivity.java中使用API​​中的代码。 右键单击Parse-1.9.0.jar – > Add As Library … app / build.gradle成为: … dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) compile files(‘libs/Parse-1.9.0.jar’) } 我很困惑为什么。 不应该编译fileTree()包含所有的jar文件? 为什么我需要做额外的步骤? 我下载的Parse-1.9.0.jar文件来自: https ://parse.com/apps/quickstart#parse_data/mobile/android/native/existing 谢谢