Articles of gradle

gradle失败,从二进制存储错误读取数据时出现问题

我有一个运行测试的gradle文件。 它没有构建任何东西。 它只有一个解压缩任务,它将gradle配置中的所有jar提取到特定目录中,然后运行Testtypes的任务。 此测试任务将testClasses目录指向上一个复制任务已将配置解压缩到的位置。 我的构建失败并显示错误消息:从二进制存储读取数据时出现问题 当我运行’gradle dependencies’时它没有显示任何错误/警告当我单独运行复制任务时,它运行得很好。 只有当我运行它失败时才会出错: > Could not resolve all dependencies for configuration ‘:testConfig’.$ > Problems reading data from Binary store in /tmp/gradle8793563212642185736.bin (exist: false)$ 我看到文件/tmp/gradle8793563212642185736.bin不存在。 这可能是什么原因?

如何使用gradle从.AAR Android库存档中排除文件

我正在尝试使用Android Studio和gradle为库Android项目创建AAR文件。 我想从此存档中排除特定的文件夹和文件,但我找不到有效的解决方案。 该项目有两种口味。 app/ |–libs/ |–src/ |–flavour1/ | |–java/ | |–a1/ | | |–class_File1.java |–flavour2/ | |–java/ | |–a1/ | | |–class_File1.java |–main/ |–java/ | |–… |–res/ | |–raw/ | | |–comments.txt | |–… |–AndroidManifest.xml 我使用像这样的build.gradle文件 apply plugin: ‘com.android.library’ android { compileSdkVersion 21 buildToolsVersion “21.1.2” defaultConfig { minSdkVersion 10 targetSdkVersion 21 } packagingOptions { […]

Espresso-web导入会导致duplicateFileException

我正在使用Android Espresso。 我需要espresso-web才能使用webview。 我根据谷歌网站设置了浓缩咖啡。 https://google.github.io/android-testing-support-library/downloads/index.html 我的依赖关系看起来像这样: dependencies { androidTestCompile ‘junit:junit:4.12’ androidTestCompile ‘com.squareup.spoon:spoon-client:1.1.10’ androidTestCompile ‘com.jraska:falcon-spoon-compat:0.3.1’ androidTestCompile ‘com.android.support:support-annotations:23.1.1’ androidTestCompile ‘com.android.support.test:runner:0.4.1’ androidTestCompile ‘com.android.support.test:rules:0.4.1’ androidTestCompile ‘com.android.support.test.espresso:espresso-core:2.2.1’ androidTestCompile ‘com.android.support.test.espresso:espresso-web:2.2.1’ androidTestCompile “org.mockito:mockito-core:1.10.19” androidTestCompile “com.google.dexmaker:dexmaker:1.2” androidTestCompile “com.google.dexmaker:dexmaker-mockito:1.2” } 当我评论espresso-web导入/方法并排除此lib时,测试运行。 但有了它,我得到: Error:Execution failed for task ‘:app:transformResourcesWithMergeJavaResForDebugAndroidTest’. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/maven/com.google.guava/guava/pom.properties File1: /Users/F1sherKK/Dev/MyProject/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-web/2.2.1/jars/classes.jar File2: /Users/F1sherKK/Dev/MyProject/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-core/2.2.1/jars/classes.jar 似乎是番石榴的一些问题。 Espress-web lib生成两个文件夹:espresso-web,espresso-core。 Espresso-core […]

使用TreeTranslator重命名不适用于Kotlin的函数

我正在尝试根据AST(抽象语法树)重写在构建期间重命名Java接口中的方法和Kotlin接口中的函数。 对于这个问题,我们忽略了重命名方法/函数给调用带来的影响。 要find要重命名的方法/函数,我正在使用自定义注释和注释处理器。 我按照这些说明操作Java接口。 我创建了一个包含三个模块的新项目。 app模块,注释模块和注释处理器模块。 app模块是一个Android应用程序,包含两个独立的Java和Kotlin接口文件,每个接口文件都有一个带注释的方法/函数。 RenameJava.java package nl.peperzaken.renametest; import nl.peperzaken.renameannotation.Rename; public interface RenameJava { @Rename void methodToRename(); } RenameKotlin.kt package nl.peperzaken.renametest import nl.peperzaken.renameannotation.Rename interface RenameKotlin { @Rename fun functionToRename() } 注释模块是一个只包含@Rename注释的Java库,我们指定只在函数上允许它,我们说它只能在源代码中可见。 Rename.kt package nl.peperzaken.renameannotation @Target(AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.SOURCE) annotation class Rename 注释处理器模块是一个Java库,它只包含迭代具有注释的元素并对其进行转换的处理器。 RenameProcessor.kt package nl.peperzaken.renameprocessor import com.google.auto.service.AutoService import com.sun.source.util.Trees import com.sun.tools.javac.processing.JavacProcessingEnvironment import com.sun.tools.javac.tree.JCTree import com.sun.tools.javac.tree.TreeTranslator […]

Android gradle项目构建非常缓慢

我们已将Android应用项目更改为使用gradle,但已注意到它的构建速度明显变慢。 在使用ANT之前: 6 sek / 50秒(干净) 用gradle后: 30 sek / 80秒(干净) 我用以下方法描述了解决方案: gradle assembleDebug –profile 结果报告中的主要任务是这些任务:(在构建中没有干净) :packageDebug 10.690s :processDebugResources 8.795s :compileDebugJava 7.644s 我对获取有关这些任务的更多详细信息没有任何想法。 这是正常的吗? 怎么可以改善? 我知道新的构建系统仍处于测试阶段,但似乎其他人的构建速度更快。 我在没有find解决方案的情况下环顾四周,我尝试过几个方面,包括确保使用包含以下内容的gradle.properties文件启用gradle deamon: org.gradle.daemon=true org.gradle.jvmargs=-Xms128m -Xmx256m org.gradle.parallel=true 的build.gradle: buildscript { repositories { mavenCentral() maven { url ‘http://download.crashlytics.com/maven’ } } dependencies { classpath ‘com.android.tools.build:gradle:0.7.+’ classpath ‘com.google.guava:guava:14.0.1’ classpath ‘com.crashlytics.tools.gradle:crashlytics-gradle:1.+’ classpath ‘me.tatarka:gradle-retrolambda:1.1.1’ classpath […]

如何使用Gradle为Android构建发布测试apk?

我知道,使用Gradle命令assembleAndroidTest我可以构建一个测试APK。 但我可以使用此测试APK仅用于我的应用程序的调试版本,对吧? 如果我将它与发布版本一起使用,我会收到错误消息,例如”[SDR.handleImages] Unable to find test for com.xxx.xxx (packagename)” 如何使用Gradle在发布模式下构建测试APK?

在打包APK期间复制文件

我使用的是Android Studio,我在那里使用了几个库。 我有: android-query-full.0.25.10.jar gson-2.2.4-sources.jar slide-menu.jar 我在build.gradle文件中定义了编译整个libs目录,如下所示: dependencies { compile ‘com.android.support:support-v4:13.0.+’ compile fileTree(dir: ‘libs’, include: ‘*.jar’) } 所有这些都很有效。 现在我想添加另一个库“PullToRefresh”我已经将Res和Src文件夹打包到一个带有eclipse源代码的jar文件中(就像我使用SlideMenu.jar一样)并将新创建的jar作为库添加到我的项目中紧挨着所有其他人。 当我尝试构建我的项目时,我从gradle中得到以下错误: Gradle: : duplicate files during packaging of APK C:\Code\TestProject\Test\build\apk\Endilo-debug-unaligned.apk Gradle: Execution failed for task ‘:Endilo:packageDebug’. > Duplicate files copied in APK res/values/attrs.xml File 1: C:\Code\TestProject\Test\libs\PullToRefresh.jar File 2: C:\Code\TestProject\Test\libs\PullToRefresh.jar 这是非常奇怪的,因为我从同一个jar文件中获得重复…这里发生了什么!?

Android Gradle app:connectedCheck从依赖项运行测试

我有一些库项目有自己的测试。 我不负责这个库项目并且不关心它的测试,但是,当我运行gradle :app:connectedCheck它运行我的测试,但它也运行依赖项的测试。 有什么办法可以阻止这个吗? 我应该提一下,我的依赖项不在我所说的app模块中。 编辑:更具体地说,我依赖的图书馆项目有非常长的测试,因为他们打算在凌晨2点在构建服务器上运行,所以我坐在这里等待油漆干燥只是为了让我真的很短试验。 EDIT2:我也尝试过使用Spoon。 我现在已经安装它并可以运行单个类,但我想在一个包中运行所有内容。 那可能吗? 编辑3:文件夹结构是无关紧要的,但这是一个非常非常详细的外观: root -some_library_project -main_project -settings.gradle main_project build.gradle看起来像这样。 我应该提一下勺子目前什么都不做,但我的选择是开放的: buildscript{ repositories { jcenter() } dependencies{ classpath ‘com.stanfy.spoon:spoon-gradle-plugin:0.10.+’ } } apply plugin: ‘com.android.application’ apply plugin: ‘spoon’ android { compileSdkVersion 20 buildToolsVersion ‘20.0.0’ defaultConfig { applicationId “com.something.main_project” minSdkVersion 17 targetSdkVersion 20 versionCode 1 versionName “1.0” testPackageName “com.something.main_project.test” testInstrumentationRunner “android.test.InstrumentationTestRunner” […]

产品味道是另一个孩子的孩子

我在我的应用程序中设置了产品风格并遇到了一个问题。 我的两种产品口味彼此非常相似,只是有一些资源不同,我们称之为FlavorA和FlavorB。 我想设置它以使FlavorA成为FlavorB的父级,这样FlavorB可以覆盖FlavorA的一些资源,然后FlavorA覆盖来自main的一堆资源。 有没有办法设置像这样的风格层次结构? 现在我需要在两者之间复制大量资源才能使它工作,我想消除这种重复。 编辑:好的。 到目前为止,我有几个答案(都已删除)与我的问题无关,所以让我澄清一下。 这与Java OOP没有关系,我已经很清楚了。 🙂 我遇到的问题是我的应用程序的免费/付费版本,以及几个仅包含主题更改的白色标签。 付费版本仅更改免费版本中的一些资产(除了代码更改)。 这就是我的productFlavors样子: productFlavors { whiteLabelA { applicationId “com.whiteLabelA.android” } whiteLabelB { applicationId “com.whiteLabelB.android” } mainFree { applicationId “com.mainFree.android” } mainPaid { applicationId “com.mainFree.android.paid” } } 我希望mainPaid覆盖mainFree因为它只更改了一些资源。 我想这样做而不是免费/付费的构建types,因为白色标签没有付费版本,并且更容易拥有类似的风格层次结构: mainPaid extends mainFree { applicationId “com.mainFree.android.paid” }

使用Android Studio 2.2和CMake在Android中编译和使用依赖于ABI的可执行二进制文件

我正在通过CMake通过stable gradle( http://tools.android.com/tech-docs/external-c-builds )测试新的Android Studio C / C ++构建。 在我的应用程序中,已经植根的设备需要使用我在Android Studio中编译的依赖于ABI的二进制文件。 当我尝试编译标准库时 add_library(mylib SHARED mylib.c) 它会自动编译并复制到APK的lib / [ABI]文件夹中(例如/lib/armeabi/mylib.so),但如果我编译可执行二进制文件: add_executable(mybinary mybinary.cpp) 在构建文件夹中核心生成二进制文件: app/build/intermediates/cmake/debug/lib/armeabi/mybinary app/build/intermediates/cmake/debug/lib/x86_64/mybinary … 但它们似乎没有被复制到apk内的任何地方。 哪种方法可以满足这种需求? gradle-task是要走的路吗? 的build.gradle: apply plugin: ‘com.android.application’ android { compileSdkVersion 24 buildToolsVersion “24.0.1” defaultConfig { applicationId “com.my.app” minSdkVersion 10 targetSdkVersion 24 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” externalNativeBuild { cmake { […]