Articles of android gradle

Android Studio – Gradle同步项目失败

在Android Studio中,我只创建了一个新项目,它说: Gradle project sync failed. Basic functionality will not work properly. 我在网上搜索并尝试了一切,但没有任何效果。 我有使用Gradle 1.11的Android Studio v0.4.6。 错误消息是: FAILURE:构建因exception而失败。 *地点: 构建文件’C:\ Users \ Vinnie \ AndroidStudioProjects \ MyFirstAppProject \ MyFirstApp \ build.gradle’行:9 * 什么地方出了错: 评估项目’:MyFirstApp’时出现问题。 > Gradle版本1.10是必需的。 当前版本是1.11。 如果使用gradle包装器,请尝试将C:\ Users \ Vinnie \ AndroidStudioProjects \ MyFirstAppProject \ MyFirstApp \ gradle \ wrapper \ gradle-wrapper.properties中的distributionUrl编辑为gradle-1.10-all.zip *尝试: […]

Vector Drawables标志在支持库24+上不起作用

今天,似乎Android Nougat已经发布 。 因此,我比以往任何时候都更兴奋地为分屏等新function优化我的应用程序。 我想推送一个针对SDK版本24应用程序版本,这样就不会通知用户我的应用程序可能无法在分屏中运行。 但是,这样做意味着我还应该更新到支持库的第24版。 与许多其他人一样,我在更新到支持库版本23.2.0时遇到了问题。 但是,我按照这个答案解决了我的问题。 现在问题是从版本24.0.0及更高版本的支持库返回。 在我的所有测试中,我使用链接答案中描述的gradle标志: vectorDrawables.useSupportLibrary = true 同样重要的是要注意,这只发生在前Lolliop设备(Kitkat及以下)上。 棒棒糖和向上工作完美。 使用以下依赖项时,该标志正常工作: compile ‘com.android.support:support-v4:23.4.0’ compile ‘com.android.support:appcompat-v7:23.4.0’ compile ‘com.android.support:design:23.4.0’ compile ‘com.android.support:cardview-v7:23.4.0’ 但是在使用这些依赖项时,我遇到的崩溃类似于使用该标志之前的崩溃: compile ‘com.android.support:support-v4:24.2.0’ compile ‘com.android.support:appcompat-v7:24.2.0’ compile ‘com.android.support:design:24.2.0’ compile ‘com.android.support:cardview-v7:24.2.0’ 这是崩溃的堆栈跟踪: FATAL EXCEPTION: main Process: com.badon.brigham.time, PID: 2070 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.badon.brigham.time/com.badon.brigham.time.MainActivity}: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f02004f […]

Dagger 2和android Studio:工作但看不到生成的类

我正在尝试在Android Studio项目中使用Dagger 2。 我用过CoffeeMaker的例子。 我设法使应用程序构建和工作: – 我没有成功看到生成的代码。 – 如果我调试,我也看不到它。 – 此外DaggerCoffeeApp_Coffee标记为芦苇(无法解析符号) 我的gradle文件是: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:1.1.3’ // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } […]

Gradle 14.4无法构建 – 未findGradle DSL方法’packageName()’

我正在使用productFlavors并尝试根据风格更改packageName: productFlavors { flavor1 { packageName “com.mypackagename.one” } flavor2 { packageName “com.mypackagename.two” } } 这工作正常,直到我更新到Gradle 0.14.4,现在它失败并显示以下消息: Error:(21, 0) Gradle DSL method not found: ‘packageName()’ Possible causes: The project ‘MyProject’ may be using a version of Gradle that does not contain the method. Open Gradle wrapper file The build file may be missing a Gradle plugin. […]

如何将Google Play服务修订与安装版本相匹配?

Android SDK Manager今天早上通知我有一个新的Google Play Services版本要下载:版本18.那么如何在build.gradle文件中find相应的长版本号呢? 我的所有测试设备都运行5.0.84版本,所以我尝试更新 compile ‘com.google.android.gms:play-services:4.4.52’ 至 compile ‘com.google.android.gms:play-services:5.0.84′ 但是这导致了一个错误: Gradle’MyApp’项目刷新失败:找不到com.google.android.gms:play-services:5.0.84。 要求: {我的应用} Gradle设置 我正在运行Android Studio 0.5.2并为API19构建(我尚未升级到Android L / API20):也许这就是问题所在? 但一般来说, 如何将SDK Manager(例如18)中显示的修订号与build.gradle的版本代码(例如5.0.84)相匹配? 这是我的完整build.gradle,以防它有帮助: apply plugin: ‘android’ android { compileSdkVersion 19 buildToolsVersion “19.1.0” defaultConfig { minSdkVersion 14 targetSdkVersion 19 versionCode 1 versionName “1.0” } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.txt’ […]

在同步Build.Gradle时出现错误“未findGradle DSL方法:’compile()’”

要向Android studio添加V4支持库,我按照以下文档: https : //developer.android.com/tools/support-library/setup.html#libs-without-res但是我收到错误。 这就是我做的 SDK管理器>已安装的Android支持库和Android存储库。 转到Build.Gradle并添加dcoument中给出的行。 Build.Gradle现在看起来像这样: //顶级构建文件,您可以在其中添加所有子项目/模块共有的配置选项。 buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:0.13.2’ // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() dependencies { compile “com.android.support:support-v4:18.0.+” } } } 然后,我得到一个popup窗口,建议我同步gradle。 当我同步Gradle时,我收到此错误: 错误:(20,0)未findGradle […]

在Android / Gradle中如何定义仅在构建特定buildType / buildVariant / productFlavor(v0.10 +)时运行的任务

Gradle的Android插件为每个BuilType / Flavor / BuildVariant生成一项任务。 问题是这个任务将动态生成,因此在定义这样的任务时不能作为依赖项使用: task myTaskOnlyForDebugBuildType(dependsOn:assembleDebug) { //do smth } 这个答案的建议解决方法就是这样 task myTaskOnlyForDebugBuildType(dependsOn:”assembleDebug”) { //do smth } 或这个 afterEvaluate { task myTaskOnlyForDebugBuildType(dependsOn:assembleDebug) { //do smth } } 但两者都不适合我。

如何仅从AAR导入选定的本机库ABI?

我有一点不寻常的问题 – 我的Android应用程序包含本机库,我为armeabi-v7a和x86构建了本机库。 但是,现在我需要将第三方库集成到我的应用程序中,该应用程序还包含本机库(第三方库是Crashlytics ,我从build.gradle通过Maven包含它)。 问题是第三方图书馆的AAR提供所有架构(armeabi,arm64-v8a,armeabi-v7a,mips,mips64,x86和x86_64),我的应用程序仅支持armeabi-v7a和x86(arm64-v8a计划在不久的将来) ,所以当最终的apk构建时,它包含第三方库的所有ABI,并且只有我的本机代码的x86和armeabi-v7a ABI。 这会导致我的应用程序在像Galaxy S6这样的arm64设备上启动时崩溃。 我的问题是:是否可以仅包含来自第三方AAR的选定ABI? 请注意,我知道APK分裂 ,但这只能部分地解决我的问题,即只有当我通过Play商店分发我的应用程序时才有效。 虽然Play商店支持beta测试发布,但更新APK的传播速度相当慢,因此在推送应用PlayStore测试版频道的更新之前,我们通过Crashlytics的beta发布系统推送更新,速度要快得多。 问题是Crashlytics的distibution系统不支持APK拆分(或者我错了吗?)。 因此,我实际上需要构建一个仅包含选定ABI的“通用”APK。 怎么实现呢? 虽然我会满意Crashlytics特定的答案(例如,如何通过他们的测试版渠道分发APK分割),但我会对构建仅包含选定ABI的“通用”APK的解决方案更满意,因为在我们公司还向客户提供SDK作为AAR档案,其中仅包含支持的架构,我们希望在他们将SDK与支持不同ABI的其他SDK集成时如何处理案例。 我正在使用最新稳定的Android工作室(1.2.1.1),gradle 2.4和android gradle插件版本1.2.3。

为什么我的JSONObject相关unit testing失败?

我正在使用gradle testFlavorType运行我的测试 JSONObject jsonObject1 = new JSONObject(); JSONObject jsonObject2 = new JSONObject(); jsonObject1.put(“test”, “test”); jsonObject2.put(“test”, “test”); assertEquals(jsonObject1.get(“test”), jsonObject2.get(“test”)); 上述测试成功。 jsonObject = new SlackMessageRequest(channel, message).buildBody(); String channelAssertion = jsonObject.getString(SlackMessageRequest.JSON_KEY_CHANNEL); String messageAssertion = jsonObject.getString(SlackMessageRequest.JSON_KEY_TEXT); assertEquals(channel, channelAssertion); assertEquals(message, messageAssertion); 但上述两个请求失败了。 堆栈跟踪表明channelAssertion和messageAssertion为null,但不确定原因。 我的问题是: 为什么上述两个断言都失败了? 下面是SlackMessageRequest 。 public class SlackMessageRequest extends BaseRequest { // region Variables public static final String […]

本地aar库的传递依赖性

我们正在为我们的API制作一些库,我们将为外部开发人员提供更轻松的生活。 因此,我们创建了新的库项目,并将Retrofit和其他一些库作为依赖项。 dependencies { compile ‘com.android.support:appcompat-v7:23.3.0’ compile ‘com.google.code.gson:gson:2.6.2’ compile ‘com.squareup.retrofit2:retrofit:2.0.1’ compile ‘com.squareup.retrofit2:converter-gson:2.0.1’ compile ‘com.squareup.okhttp3:okhttp:3.2.0’ } 现在,当我们构建它时,它会生成aar文件。 但是现在当我们将aar文件放到libs目录并将其设置为依赖项时,我们仍然必须在用户的build.gradle文件中添加相同的依赖build.gradle ,这很糟糕。 它应该来自图书馆,对吗? repositories { flatDir { dirs ‘libs’ } } dependencies { compile(name: ‘ourlibrary’, ext: ‘aar’) { transitive = true; } } 如何使transitive = true工作?