Articles of gradle

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 { […]

尝试创建gradle构建时出现问题

我们最近迁移到Android Studio(来自Intellij)。 我目前正在尝试迁移我们的项目以使用gradle进行构建。 我已经尝试将它安装在我们当前的文件夹结构周围,并且我已经尝试迁移我们的文件以匹配gradle文件结构。 我每次都有错误,我一直在寻找答案,但找不到任何与我们得到的相匹配的东西。 我尝试迁移到gradle文件结构时遇到的错误是: 什么地方出了错: 配置项目’:’时出现问题。 无法通知项目评估监听器。 未find名称“default”的配置 我使用旧文件结构得到的错误是: ::processDebugResources /Users/kbrown/dev/AndroidClient//build/res/all/debug/values/values.xml:311: error: Error retrieving parent for item: No resource found that matches the given name ‘@style/Widget.Sherlock.ActionBar.Solid’. /Users/kbrown/dev/AndroidClient//build/res/all/debug/values/values.xml:312: error: Error: No resource found that matches the given name: attr ‘background’. /Users/kbrown/dev/AndroidClient//build/res/all/debug/values/values.xml:314: error: Error: No resource found that matches the given name: attr ‘backgroundSplit’. 关于在哪里看的任何想法。 […]

在iOS中,我们在Android上有类似Gradle Build Flavors的东西

在iOS中,我们在Android上有类似Gradle Build Flavors的东西。 基本上我想将Applause SDK与我的应用程序集成,但我不希望该代码成为发布版本的一部分。 我只想使用applause sdk来内部分发应用程序并进行错误报告。 如果没有什么比味道更好的话,那么最好的方法是什么。