Articles of gradle

Android Studio 1.0在dexDebug或dexRelease上构build失败

我最近从Android Studio 0.9.2升级到1.0(包括版本1.0.0的Gradle插件),我在构build项目时遇到了问题。 每当我build立我在dexDebug或dexRelease步骤得到以下exception: UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.HashMap.createEntry(HashMap.java:897) at java.util.HashMap.addEntry(HashMap.java:884) at java.util.HashMap.put(HashMap.java:505) at com.android.dx.rop.type.Type.putIntern(Type.java:857) at com.android.dx.rop.type.Type.intern(Type.java:365) at com.android.dx.rop.type.Type.internClassName(Type.java:415) at com.android.dx.cf.cst.ConstantPoolParser.parse0(ConstantPoolParser.java:289) at com.android.dx.cf.cst.ConstantPoolParser.parse0(ConstantPoolParser.java:299) at com.android.dx.cf.cst.ConstantPoolParser.parse(ConstantPoolParser.java:150) at com.android.dx.cf.cst.ConstantPoolParser.parseIfNecessary(ConstantPoolParser.java:124) at com.android.dx.cf.cst.ConstantPoolParser.getPool(ConstantPoolParser.java:115) at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:482) at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) at com.android.dx.command.dexer.Main.processClass(Main.java:704) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673) at com.android.dx.command.dexer.Main.access$300(Main.java:82) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602) at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) at […]

为什么我仍然得到java.lang.NoClassDefFoundError:android.support.v7.appcompat.R $ attr?

所以我正在开发一个俗气的应用程序,使之在我的公司真正的应用程序项目上工作之前,让自己在Android中进行自我训练。 我遇到了一个让我非常困难的bug。 我得到了一个我要使用的库依赖关系列表,并将我的build.gradle文件设置为加载它。它同步很好,所以我认为这是完全正确的: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.google.android.gms:play-services:7.3.0' compile 'com.squareup.okhttp:okhttp:2.3.0' compile 'com.squareup.retrofit:retrofit:1.7.0' compile 'com.google.code.gson:gson:2.3' compile 'com.squareup.dagger:dagger:1.2.2' compile 'com.squareup.dagger:dagger-compiler:1.2.2' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.android.support:recyclerview-v7:22.1.1' compile 'com.squareup:otto:1.3.7' compile 'com.path:android-priority-jobqueue:1.1.2' compile 'io.realm:realm-android:0.80.1' compile 'com.jakewharton:butterknife:6.1.0' compile 'com.android.support:multidex:1.0.0' compile 'com.android.support:appcompat-v7:22.1.1' } 而且我实际上已经安装了android支持库和存储库: 但我仍然尝试启动应用程序,并获得以下堆栈跟踪: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$attr at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:286) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) at com.anglersatalas.twitstagram.MainActivity.onCreate(MainActivity.java:23) at android.app.Activity.performCreate(Activity.java:5451) […]

Android studio – 无法完成gradle执行 – 打开zip文件时出错

我是新的android开发和android studio IDE。 我已经从bitbucket签出了一个项目,当我尝试编译它,我得到以下错误: 无法完成Gradle执行 原因:打开zip文件时出错。 我的gradle-wrapper.properties如下所示: distributionBase = GRADLE_USER_HOME distributionPath =包装/ dists中 zipStoreBase = GRADLE_USER_HOME zipStorePath =包装/ dists中 distributionUrl = HTTP \://services.gradle.org/distributions/gradle-1.11-all.zip 我不能从这个得到太多的信息,但完整的日志状态: 2014-05-23 14:06:28,950 [32077] WARN – nal.AbstractExternalSystemTask – 原因:打开zip文件时出错com.intellij.openapi.externalSystem.model.ExternalSystemException:原因:在org.jetbrains打开zip文件时出错。 plugins.gradle.service.project.GradleExecutionHelper.execute(GradleExecutionHelper.java:206)在org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:116)在org.jetbrains.plugins.gradle。 service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:64)com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl $ 1.produce(RemoteExternalSystemProjectResolverImpl.java:41)at com.intellij.openapi.externalSystem.service.remote .RemoteExternalSystemProjectResolverImpl $ 1.produce(RemoteExternalSystemProjectResolverImpl.java:37)at com.intellij.openapi.externalSystem.service.remote.AbstractRemoteExternalSystemService.execute(AbstractRemoteExternalSystemService.jav a:59)at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl.resolveProjectInfo(RemoteExternalSystemProjectResolverImpl.java:37)at com.intellij.openapi.externalSystem.service.remote.wrapper.ExternalSystemProjectResolverWrapper.resolveProjectInfo(ExternalSystemProjectResolverWrapper.java: 49)com.intellij.openapi.externalSystem.service.internal.ExternalSystemResolveProjectTask.doExecute(ExternalSystemResolveProjectTask.java:48)at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:137)at com .intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:123)at com.intellij.openapi.externalSystem.util.ExternalSystemUtil $ 3.execute(ExternalSystemUtil.java:467)at com.intellij.openapi。 externalSystem.util.ExternalSystemUtil $ 4 […]

我可以设置一个BuildConfig标志,返回是否使用“connectedAndroidTest”gradle任务构build了一个apk。

我有我的应用程序的一部分,我不想运行,如果我们正在运行Androidunit testing,所以我想围绕他们的东西 if (!BuildConfig.TESTING) { // Code here that I don't want to run during tests. } 是否有可能根据是否使用connectedAndroidTest gradle任务来填充此BuildConfig标志? 这是解决这个问题的一个理智的方法吗?

在Android Studio 1.3.1中多次导入库项目会导致库消失

我有一个名为Common的库项目,我使用的function由我的其他项目Consumer和Management共享。 消费者本身也是其他应用程序使用的库项目。 Common中的build.gradle文件包含其他项目使用的所有外部依赖项,如下所示: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.google.code.gson:gson:2.2.2' compile 'com.android.support:support-v4:22.1.0' compile 'com.squareup.picasso:picasso:2.5.2' } 这下载下面的库: 当我将“通用”添加到“消费者”,“pipe理”或两者时,此列表保持不变 当我将消费者添加到MyApp时,如下所示: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':consumer') } 有时候是这样的: 支持库消失了,在我的项目中造成了巨大的破坏。 这在更新到Android Studio 1.3.1之前没有发生,所以我真的想知道这个问题可能是什么。 作为参考,这些是完整的gradle.build文件: 共同 apply plugin: 'com.android.library' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 11 targetSdkVersion 22 versionCode 1 versionName […]

使用Robolectric和Gradle时资源$ NotFoundException

我一直在关注如何设置Robolectric来testing我的Android Gradle项目。 我一直打这个错误: android.content.res.Resources$NotFoundException: no such label com.mypackage.dev:string/app_name 通过从教程下载示例项目,我已经确定问题是我的productFlavors (dev,staging,production)。 添加味道到工作示例项目导致同样的问题。 你可以在这个答案中看到我的build.gradle的轮廓。 我见过各种答案(例如这里 ),这表明我需要指定每种口味的sourceSets 。 我尝试了很多组合,但不能完全正确。 任何人都可以帮忙吗? 另一件令我困惑的事情是,我所见过的所有Robolectric示例似乎都在指定“instrumentTest”的sourceSets和dependencies,即使Robolectrictesting总是只在“test”文件夹中。 在我的情况下,我已经在instrumentTest文件夹中有了Robotiumtesting,我不明白为什么需要为Robotium代码添加Robolectric依赖关系。

注释处理器生成的资源未打包到APK

我有自定义注释处理器生成工厂类和META-INF/services/factory.interface.class资源。 在库项目中使用注释处理器,并将所有生成的文件正确打包到AAR中。 当我在应用程序项目中使用注释处理器并将库作为依赖项添加时,只有来自库META-INF/services/factory.interface.class存在于APK/META-INF/services/factory.interface.class 经过一番调查之后,我意识到在Android-gradle-plugin-1.5.0(和2.0.0-alpha3)中exploded-aar在所有的exploded-aar , jar和intermediates/sourceFolderJavaResources寻找合并的资源 有没有什么办法可以从intermediates/classes (它是从注解处理器创build资源文件的地方)合并META-INF ,或者在sourceFolderJavaResources创build注释处理器创build文件? 目前为止唯一的解决方法是在应用程序的buildscript中添加CopyTask android.applicationVariants.all { variant -> def variantName = variant.name def variantNameCapitalized = variantName.capitalize() def copyMetaInf = tasks.create "copyMetaInf$variantNameCapitalized", Copy copyMetaInf.from project.fileTree(javaCompile.destinationDir) copyMetaInf.include "META-INF/**" copyMetaInf.into "build/intermediates/sourceFolderJavaResources/$variantName" tasks.findByName("transformResourcesWithMergeJavaResFor$variantNameCapitalized").dependsOn copyMetaInf } 但我不会强迫编译器库用户做任何事情比添加依赖关系。

如何使用Gradle压制“警告:忽略匿名内部类的InnerClasses属性”?

如何使用Gradle压制“警告:忽略匿名内部类的InnerClasses属性”? 这不是一个重复的问题 这不是在Proguard期间,也不想使用Proguard压制 我想压制做正常./gradlew assembleDebug (因为这是assertj-core – ./gradlew testDebug ) 相关性: dependencies { testCompile "org.assertj:assertj-core:1.7.1" } 警告: Dex: warning: Ignoring InnerClasses attribute for an anonymous inner class (org.assertj.core.internal.cglib.reflect.FastClassEmitter$3) that doesn't come with an associated EnclosingMethod attribute. This class was probably produced by a compiler that did not target the modern .class file format. The recommended […]

Android gradle build:运行assembleDebug可以调用项目依赖关系的发布任务

当运行assembleDebug时,我所依赖的项目的版本相关任务被调用。 例如,我有一个名为'x'的项目取决于'y'。 当我gradle assembleDebug调用y:mergeReleaseProguardFiles,packageReleaseAidl,等等..

APK的大小比预期的更大 – android studio

我的项目内容大小是这样的, 主项目(来源及资产规模513KB) 模块1(来源和资产大小135KB) 模块2(来源和资产大小80KB) 和apk(签名,debugging两者)大小是4.87MB。 也试过ProGuard没有任何改变。 我不明白这个原因。 即使我没有添加任何jar文件到我的项目。