Articles of gradle

Gradle buildType / productFlavor使用意外的buildConfigField

鉴于以下配置: productFlavors { normal { applicationId “com.app” } mock { applicationId “com.app.mock” } } buildTypes { debug { productFlavors.normal.buildConfigField “boolean”, “mockMode”, “false” productFlavors.mock.buildConfigField “boolean”, “mockMode”, “true” } release { productFlavors.normal.buildConfigField “boolean”, “mockMode”, “false” // Release should never point to mocks. Ever. productFlavors.mock.buildConfigField “boolean”, “mockMode”, “false” } } 我原以为BuildConfig.mockMode = true; 但是,这是生成的构建配置: public final class BuildConfig […]

粘性网格标题不适用于某些Android版本

我正在使用Sticky网格标题与下面的应用程序Gradle依赖项。 dependencies { compile fileTree(include: [‘*.jar’], dir: ‘libs’) compile ‘com.android.support:appcompat-v7:25.3.1’ compile ‘com.android.support:design:25.3.1’ compile ‘com.android.support:support-v4:25.3.1’ compile ‘com.tonicartos:stickygridheaders:1.0.1’ testCompile ‘junit:junit:4.12’ } 并且构建工具版本 android { compileSdkVersion 25 buildToolsVersion “25.0.2” defaultConfig { applicationId “com.example.stickyheader” minSdkVersion 16 targetSdkVersion 25 versionCode 8 versionName ‘3’ multiDexEnabled true } } Curruntly使用android studio 2.2.3。 在我更新Android studio之前,它适用于所有设备,也适用于kitkat版本。 在某些设备中特别是在kitkat下面崩溃,以及kitkat版本代码以上工作正常。 在以下版本的kitkat设备中,我收到了此错误, 堆栈跟踪 04-14 10:32:13.520 24869-24869 / com.example.stickyheader […]

兄弟子模块上的资源,Gradle项目

我正在尝试将我公司的项目从Maven迁移到Gradle,到目前为止我已经能够将所有POM转换为相应的build.gradle文件,但是在构建时我在子模块中遇到了一个问题。 – Core-UI —- Utils —- FieldPanels 子模块FieldPanel使用Utils中定义的颜色和其他资源。 我尝试添加Utils项目作为依赖项,但它不起作用,我错过了什么? /home/development/AndroidStudioProjects/com.project/core-ui/common.android.fieldpanels/build/bundles/debug/res/layout/base_summary_step_layout.xml:2: error: Error: No resource found that matches the given name (at ‘background’ with value ‘@color/wizard_summary_bg’). Utils gradle.build buildscript { repositories { mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:0.5.2’ } } apply plugin: ‘android-library’ android { sourceSets { main { manifest { srcFile ‘AndroidManifest.xml’ } res { […]

如何发布Android .aar源码以使Android Studio自动find它们?

我正在将库发布到内部Sonatype Nexus存储库。 Android Studio具有自动查找通过gradle引用的库的正确来源的function。 我将aar的来源作为一个单独的jar发布到nexus。 但Android Studio并没有把它们搞砸。 如何发布源代码以使其在Android Studio中可用?

在Android Studio上调试基于gradle的Java项目?

我目前的项目由两个模块组成,一个是android,另一个是可以作为独立的桌面java使用。 我想自己运行第二个模块,并且无需通过设备即可调试它。 我不想让一个辅助IntelliJ安装在一个或另一个之间进行交换。 AS中是否有任何方法可以将调试器附加到java gradle任务中? apply plugin: “java” sourceCompatibility = 1.6 sourceSets.main.java.srcDirs = [ “src/” ] project.ext.mainClassName = “com.project.Desktop.Launcher” project.ext.assetsDir = new File(“../android/assets”); task run(dependsOn: classes, type: JavaExec) { main = project.mainClassName classpath = sourceSets.main.runtimeClasspath standardInput = System.in workingDir = project.assetsDir ignoreExitValue = true } task dist(type: Jar) { from files(sourceSets.main.output.classesDir) from files(sourceSets.main.output.resourcesDir) from {configurations.compile.collect […]

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(); } 但它也不起作用。 我不想要以下解决方案。 […]