Articles of gradle

Android数据绑定依赖项与支持库冲突

我正试图在我的Android项目中设置数据绑定,如下所示: dataBinding { enabled = true } 但是,当我添加支持库依赖项时,lint会抱怨: 所有com.android.support库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。 发现版本25.1.0,21.0.3。 示例包括’com.android.support:animated-vector-drawable:25.1.0’和’com.android.support:support-v4:21.0.3′ 当我运行./gradlew app:dependencies ,我得到以下内容: … +— com.android.support:appcompat-v7:25.1.0 | +— com.android.support:support-annotations:25.1.0 | +— com.android.support:support-v4:25.1.0 | | +— com.android.support:support-compat:25.1.0 (*) | | +— com.android.support:support-media-compat:25.1.0 | | | +— com.android.support:support-annotations:25.1.0 | | | \— com.android.support:support-compat:25.1.0 (*) | | +— com.android.support:support-core-utils:25.1.0 | | | +— com.android.support:support-annotations:25.1.0 | | | […]

在android studio中创建新项目时出错

每次我创建新项目时都会收到此错误: Failed to import new Gradle project: Could not fetch model of type ‘IdeaProject’ using Gradle distribution ‘http://services.gradle.org/distributions/gradle-1.6-bin.zip’. Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. Please refer to the user guide chapter on the daemon at http://gradle.org/docs/1.6/userguide/gradle_daemon.html […]

在Android上分叉gradle依赖项

我有一段时间没有开发Android,我正在尝试使用Gradle依赖项的新function做正确的事情。 我想知道当您需要修改一个特定的依赖项以满足您的需求时,最佳实践是什么。 例如,假设我们有两个库通过子类化适配器来扩展RecyclerViewfunction: Adapter –> AdapterA Adapter –> AdapterB 由于Java不支持多重inheritance,我想让两个库一起工作的唯一方法就是修改其中一个,这样子类层次结构如下所示: Adapter –> AdapterA –> AdapterB 如果我是正确的,这是要走的路,那么修改和集成库的最佳方法是什么,以下是我能想到的选项: 在GitHub上分叉并使用JitPack添加分叉修改的库 将库作为本地模块添加到应用程序并修改源 请certificate或建议什么是更好的,如果有任何其他替代方案来实现这一点。

如何从Android Studio中的根风格inheritance两种构建风格?

我曾经有以下项目口味: 苹果 橙子 最初唯一的区别是applicationId/packageName 。 现在有一个不同的java文件。 准确地说是自定义ArrayAdapter。 解决方案是创建src/Apple和src/Orange并且都inheritance自src/main 。 我从src/main删除了java文件,并将副本放入src/Apple和src/Orange并进行了相应的修改。 世界上一切都很好。 快进几周,现在大约有10个不同的Apple和Orange之间的java文件。 再说……没什么大不了的。 易于操作。 在src/Apple和src/Orange分离java文件。 快进到今天。 我需要稍微修改一下,因为我希望每个都有免费的高级版本。 免费版和高级版仅因URL而异。 我打算简单地创建一个名为的新types: AppleFree ApplePremium OrangeFree OrangePremium 我有一个困境。 从现在开始src/Apple和src/Orange有10个不同的文件已被更改…如果我在AppleFree更改任何java文件,我必须确保我在ApplePremium也这样做。 我有点处于十字路口,希望我的问题在这一点上有意义。 我提出了三种可能的解决方案,但我不确定如何实施它们/什么是正确的方法/解决方案不是我想要的。 解决方案1: 使用if语句if (BuildConfig.FLAVOR==appleFree) {//use free Url} else {// use premium url} 问题:两个Urls在技术上都编译成了apk。 我不想要这个。 解决方案2: 让src / AppleFree和src / ApplePremium以某种方式从src / Apple父目录inheritance。 问题:不确定我会怎么做。 解决方案3: 在build.gradle中添加免费和高级url是这样的吗? productFlavors { appleFree { […]

应用:transformClassesWithJarMergingForDebug”。 TransformException:java.util.zip.ZipException:运行gradlew assembleDebug时重复的条目

当我在android studio项目根目录上运行: gradlew assembleDebug命令。 构建过程失败,我收到此消息: 什么地方出了错: 任务’:app:transformClassesWithJarMergingForDebug’的执行失败。 com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:org / slf4j / impl / StaticLoggerBinder.class 在我的项目中有两个jar文件: slf4j-android-1.6.1-RC1.jar和slf4j-log4j12-1.7.21.jar 。 这两个jar子都包含两个包含org.sl4j.impl.StaticLoggerBinder的jar子。 这是我的gradle文件内容,它位于app文件夹中: android { compileSdkVersion 23 buildToolsVersion “22.0.1” defaultConfig { applicationId “com.ias.caniasandroid” minSdkVersion 18 targetSdkVersion 23 versionCode 1 versionName “1.0” multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } dexOptions { jumboMode true […]

从Play服务整体过滤资源,使您的APK更小

关于Google Play服务的整体性质以及为什么应将其拆分为更多库,已经写了很多。 目前,保持APK较小的解决方法是使用proguard去除未使用的引用。 这适用于classes.dex,但不适用于包含的资源。 我获得了大约1 MB的额外未使用资源,并且捆绑的Android Wear应用程序这个开销增加了一倍。 所以我的APK比需要的大2 MB。 我想知道在Gradle中是否有一些直接的方法可以从生成的APK中排除来自依赖项AAR的一些资源。 似乎Gradle Android插件中的AAPT选项只允许过滤资产 。 我正在考虑挂钩一些自定义的aapt脚本,在签署APK发布之前使用aapt调用remove for a资源列表。 别人有更简单的解决方案吗?

添加新库后,Android studio构建速度变慢了吗?

我的应用程序使用旧架构组件。 我想转向新的Android架构组件 。 为此,我在开始时添加了与房间相关的依赖项,之后构建正常。 但是,当我尝试为Lyfecycles,LiveData和ViewModel添加依赖项时,如此处所述。 应用程序构建过程大大减慢,构建apk需要5分钟和更长的时间。 在app的build.gradle中添加了以下dependecies: compile “android.arch.lifecycle:runtime:1.0.0-alpha5” compile “android.arch.lifecycle:extensions:1.0.0-alpha5” annotationProcessor “android.arch.lifecycle:compiler:1.0.0-alpha5” 此外,我必须启用插孔以实现Java 8兼容性,如下所示: defaultConfig { …….. jackOptions { enabled true } } 添加所有这些组件后,构建过程已大大减慢。 我尝试通过“ Help -> Edit custom VM options为某些参数进行一些自定义VM选项更改 -Xmx5120m 我把它设置为几乎5 GB,但没有任何对我有用。 我相信我的机器有足够的硬件。 (8 GB RAM,Windows 10,1TB HDD,AMD A8) 我的应用程序使用了许多谷歌服务,如Gmail API,Firebase API,其他一些库我用尽了64K参考限制? 但是我已经启用了这里提到的多索引。 是否因为新的架构组件或其他原因而发生了这种情况? 如何使构建过程更快? 更新: 下面的答案之一Budius提出了一个脚本,它将显示每个构建过程所采用的时间,我在我的应用程序中执行它的结果是: BUILD SUCCESSFUL Total time: 18 […]

Android Studio不支持的Gradle插件版本

与此处提出的问题类似: Android Studio不支持gradle版本,但我使用的是兼容版本 ,但答案并没有解决我的问题。 我正在使用在Ubuntu 14.04 LTS下运行的Android Studio Beta 0.8.1。 我正在尝试导入一个与我的团队共享的项目,但是当我克隆项目并尝试构建它时,我收到此错误: Error:The project is using an unsupported version of the Android Gradle plug-in (0.11.2) Fix plug-in version and re-import project 当我点击链接时,我收到此错误: 12:21:30 PM Quick Fix Failed Unable to find any references to the Android Gradle plug-in in build.gradle files. Please click the link to perform […]

如何使用gradle动态切换/更改testInstrumentationRunner

我的项目有两组不同的测试。 一个组仅使用默认的AndroidJUnitRunner运行,另一个组必须使用自定义实现运行TestRunner extends MonitoringInstrumentation 。 目前,每次我需要运行另一组测试时,我testInstrumentationRunner通过编辑testInstrumentationRunner来切换testInstrumentationRunner : android{ defaultConfig { //testInstrumentationRunner “my.custom.TestRunner” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } } 我知道口味可以有自己的testInstrumentationRunner但我当前的应用程序已经有2个flavourDimensions 。 使用flavor实际上是为了拥有不同版本的app。 我需要2个版本的测试应用程序,它们都使用不同的testInstrumentationRunner测试相同的应用程序。 我尝试通过迭代所有测试变体来更改testInstrumentationRunner 。 实际上有多个testInstrumentationRunner属性: android.testVariants.all { TestVariant variant -> //readonly variant.variantData.variantConfiguration.instrumentationRunner variant.variantData.variantConfiguration.defaultConfig.testInstrumentationRunner } 但是一旦调用了android.testVariants ,就会配置构建并且所有更改都不会反映在构建中。 如何动态更改testInstrumentationRunner(从gradle插件)? 我更喜欢有两个不同的gradle任务,每个任务使用不同的testInstrumentationRunner但测试相同的变体。 因为我打算创建一个gradle插件,所以解决方案也应该像插件一样工作。

无法解析com.android.tools.build.gradle:3.0.1

我强迫gradle使用http我修改了我的gradle-wrapper.properties: distributionUrl=http\://services.gradle.org/distributions/gradle-4.3-all.zip build.gradle: buildscript { repositories { //jcenter() //google() maven { url “http://jcenter.bintray.com”} } dependencies { classpath ‘com.android.tools.build:gradle:3.0.1’ // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }} allprojects { repositories { jcenter() maven { url ‘http://maven.google.com’ } maven { url “http://jitpack.io” } }} 据我所知,我应该使用3.0.1但是当我检查jitpack或maven上的实际repo时,只有2.3.3可用。 我得到的错误信息是: […]