Tag: gradle

许多小模块,或几个大型模块的最佳构建性能?

几年前,当第一次采用gradle for Android(在Gradle 2.0之前)时,我发现使用和取决于一个模块有一些开销,所以我远离将我的项目拆分成更小的模块,而是创建非常大的模块。 在尝试了一些其他的构建系统(比如Buck)之后,通过将你的代码分解成多个小模块来获得性能。 一些像Kotlin这样的现代编程语言甚至有专门建立在将你的代码分解成模块的概念的可见性修饰符。 我们目前在Gradle 2.14.1(差不多3.0),在过去几个版本中,他们引用了巨大的性能收益。 随着Gradle / Android插件在过去几年的变化,它现在是否产生更快的构建,将您的代码拆分成更小的模块,或者使用更少的大模块?

Tomcat gradle插件 – 失败的跟踪修改

我的老板在我的膝盖上放了一个他用eclipse开发的tomcat web应用程序。 他自己在项目上工作,所以他不使用Maven这样的包管理器。 我结束了在网上下载几个遗失的罐子。 希望它不会在我后面咬我…我正在尝试建立一个新的项目结构,我没有使用Tomcat或Java Web应用程序的经验。 我正在使用gradle tomcat插件,并且正在Failed tracking modifications of '/WEB-INF/lib错误进行Failed tracking modifications of '/WEB-INF/lib 。 我猜我的图书馆软件包没有按照我的设置正确放置。 这是我的项目结构: http : //i.imgur.com/FCjTswP.png 这是我的gradle文件: group 'wdm' version '1.1.1' buildscript { ext.kotlin_version = '1.0.4' repositories { jcenter() mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.bmuschko:gradle-tomcat-plugin:2.2.5' } } apply plugin: 'java' apply plugin: 'kotlin' apply plugin: 'com.bmuschko.tomcat' sourceCompatibility […]

在多项目设置中ConfigurationsContainer为空

我的Android项目中有一个多项目设置: – android – app – lib1 – util 在util我定义了一个配置: task createTestJar(type: Jar) { classifier = 'test' from "$projectDir/build/intermediates/classes/test/debug" } configurations { archives archives.transitive = true } artifacts { archives createTestJar } 我试图在lib1引用它: // doesn't work testCompile project(path: ':util', configuration: 'archives') 我得到这个错误的上述行: 错误:com.android.builder.dependency.level2.JavaDependency无法转换为com.android.builder.dependency.level2.AndroidDependency这个意外错误的可能原因包括: Gradle的依赖关系缓存可能已损坏(有时发生在网络连接超时之后)。重新下载依赖项并同步项目(需要网络) Gradle构建过程(守护进程)的状态可能已损坏。 停止所有的Gradle守护进程可能会解决这个问题。 停止Gradle构建过程(需要重新启动) – 您的项目可能使用与项目中的其他插件或项目请求的Gradle版本不兼容的第三方插件。 在损坏的Gradle进程的情况下,您也可以尝试关闭IDE,然后杀死所有的Java进程。 // says can't find 'archives' […]

如何使用productflavors和jni来设置Android库模块

我想包括mupdf作为一个预编译的.so二进制文件到我的项目的Android库模块。 我有一个应用程序模块,其中包括我的库模块。 dependencies { compile project(':mupdf') } 在我的mupdf库模块中,我有我编译的二进制文件。 mupdf – jniLibs – arm64-v8a libmupdf.so – armeabi libmupdf.so – armeabi-v7a libmupdf.so – x86 libmupdf.so – x86_64 libmupdf.so 我的mupdf库项目的build.gradle: apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled […]

项目结构上的Android Studio中的StackOverflowError:null

自从我更新到Android Studio 2.3以来,在某些情况下会出现IDE错误:例如,当我单击File->Project Structure ,尝试打开任何布局XML,甚至单击任何build.gradle文件的代码中的任意build.gradle (这些至少开放无例外)。 该错误说StackOverflowError: null ,堆栈跟踪在所有情况下是相同的: null java.lang.StackOverflowError at java.util.regex.Pattern.sequence(Pattern.java:2079) at java.util.regex.Pattern.expr(Pattern.java:1996) at java.util.regex.Pattern.compile(Pattern.java:1696) at java.util.regex.Pattern.<init>(Pattern.java:1351) at java.util.regex.Pattern.compile(Pattern.java:1028) at java.lang.String.replaceAll(String.java:2223) at com.android.tools.idea.gradle.dsl.parser.settings.ProjectPropertiesDslElement.getStandardProjectKey(ProjectPropertiesDslElement.java:52) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveProjectReference(GradleDslExpression.java:191) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveReference(GradleDslExpression.java:92) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslReference.getValue(GradleDslReference.java:66) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveReference(GradleDslExpression.java:152) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslReference.getValue(GradleDslReference.java:66) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveReference(GradleDslExpression.java:152) …和最后2行永远重复。 我能做些什么来找到这个问题的根源? 看起来在我的构建配置中有一个循环引用,或Studio的内部? 但是我找不到任何人。 如果我至少知道堆栈跟踪中提到的模式或参考是有帮助的。 我已经尝试过的事情: 无效的缓存和重新启动 删除项目目录中的.idea/和其他临时文件夹 检查项目到一个新的位置 在settings->build->gradle->experimental启用“新建项目结构对话框” – 然后对话框工作,但是关闭它仍然会出现同样的错误,其他情况下仍然不起作用 我使用的Android Studio 2.3.3所有的插件和Android库更新,gradle 3.3和gradle插件2.3.1; 所有在最新的gentoo linux上。

Android Studio – java.io.IOException:无法生成v1签名

在3.0 Canary 4之后,我的Android Studio更新到所有新版本后,我得到这个错误。(我使用v3.0,因为它速度更快,而且没有必要插入Kotlin。) 它看起来像构建流的问题,它不能生成或签署我的APK文件的调试和发行版本。 我也尝试删除我的debug.keystore ,重新启动AndroidStudio和系统(!!!),但它并没有解决。 这是一个完整的Gradle日志: 失败:生成失败,出现异常。 出了什么问题:执行任务失败':chris-app:packageDemoDebug'。 java.io.IOException:无法生成v1签名 试试:运行–info或–debug选项来获得更多的日志输出。 异常是:org.gradle.api.tasks.TaskExecutionException:任务':chris-app:packageDemoDebug'的执行失败。 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)在org.gradle.api.internal的org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)上的.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) .tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)at org.gradle.api.internal.tasks.execution .ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)at org.gradle.api.internal.tasks .execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter .execute(CatchExceptionTaskExecuter.java:34)at org.gradle.execution.taskgraph.DefaultTaskGraphExeter $ $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:243)at org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:在org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)org.gradle.internal.progress .DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)at org.gradle.execution.taskgraph.DefaultTaskGraphExeterter $ EventFiringTaskWo 在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:$)上执行org.gradle.execution.taskgraph.DefaultTaskGraphExeter $ $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:225) 124)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.access $ 200(DefaultTaskPlanExecutor.java:80)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:105)在org.gradle .execute.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker […]

android gradle build:生成的类列表不存在

当我尝试在android studio 2.3.2中构建我的android应用程序时,出现以下单个错误: Error:Execution failed for task ':viewmodel:transformClassesAndResourcesWithSyncLibJarsForRelease'. > failure, see logs for details. Generated class list does not exist MyPath\viewmodel\build\intermediates\data-binding-info\release\_generated.txt 该文件夹确实是空的,我在调试,而不是释放(但也调试是空的)构建这整个事情。 我使用匕首(2.10)进行依赖注入,这可能是这个问题的根源,但是我无法真正在网络上找到这个错误的帮助。 这个模块的gradle.build文件: apply plugin: 'com.android.library' apply plugin: 'com.neenbedankt.android-apt' android { def rootConfig = rootProject.ext compileSdkVersion rootConfig.androidCompileSdkVersion buildToolsVersion rootConfig.androidBuildToolsVersion dataBinding { enabled = true } defaultConfig { minSdkVersion rootConfig.androidMinSdkVersion targetSdkVersion rootConfig.androidTargetSdkVersion versionCode rootConfig.applicationVersionCode versionName […]

即使没有任何更改,Android多模块Gradle构建也会很慢

我有一个Android项目与多个模块的构建时间慢,即使我试图重建它,而不需要改变任何东西。 其结构类似于: 有更多的“父母”(和独立的父母兄弟姐妹)和“功能”模块,但设置是图片。 我的gradle.properties文件如下: org.gradle.jvmargs=-Xmx4096m -Xms2048m org.gradle.parallel=true org.gradle.daemon=true org.gradle.configureondemand=true 我正在使用Gradle版本3.5和插件版本2.4.0-alpha7。 该项目还使用multidex( javaMaxHeapSize "4g"和jumboMode true ),数据绑定,kotlin和java以及几个注释处理器。 在构建时,我可以看到多个线程在大多数项目中并行运行不同的任务,除了最后的“app”模块(我认为是正常的)之外。 但是很多时候似乎花费在不同的:: compileJavaWithJavac任务上。 即使没有改变任何东西,构建需要约30秒的MacBook Pro I7与16 Gb RAM。 如果我在一个特征模块的一个方法内改变一行代码(甚至不改变方法的签名),构建时间将超过1:30分钟。 这是正常的时候吗? 有什么我可以进一步优化,以提高生成时间? 我也检查了一些其他的答案: 从这一个 ,设置preDexLibraries = false不起作用,我已经使用assembleDebug 这里建议incremental = true ,不起作用,不推荐使用 禁用即时运行似乎有一点帮助,但不是很多 上面讨论的项目的构建风格已经设置minSdkVersion 21

在模块之间共享编译依赖关系

我有两个模块的Android项目。 两个模块都依赖于android支持库。 目前,支持库依赖项被添加到两个模块的gradle脚本中。 当我升级支持库版本时,我必须在两个gradle文件中升级版本。 我有时会忘记在这两个文件中这样做。 所以我需要一种方法来在一个共同的地方声明支持版本。 这个页面描述了一种方法,在这个方法中,在一个单独的文件中声明依赖关系,并将其包含在根gradle文件中。 这种方法对我有用,但是有一些限制。 举个例子,如果有一个新的支持库,在以前的方法中,android studio给了我一个检查警告,提供一个更新的版本。 用新的方法,android studio不再那样做。 另外,无论何时在Gradle文件中进行更改,android studio都会要求重新同步项目。 但是,如果我改变了分离的gradle依赖文件,android studio不要求我重新同步。 我试图直接添加支持依赖到根gradle文件的依赖部分,如下所示,但android studio给我一个警告。 // 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.5.0' compile "com.android.support:appcompat-v7:23.2.1" } } 警告: Fix plugin version and sync project. 有谁知道任何其他方式,我可以在一个中央的地方声明依赖?

jvmArgs设置的魅力报告

我试图通过ussing生成报告 gradlew clean test 命令。 它失败,错误: Error occured during intialization of VM Error opening zip file or JAR nanifest missing : ${configurations.agent.singleFile} 这是我的build.gradle文件: group 'RegisteredUserFlow' version '1.0-SNAPSHOT' buildscript { ext.kotlin_version = '1.1.2-2' repositories { jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'kotlin' repositories { jcenter() } configurations { agent } dependencies { […]