2017-05-27 121 views
0

我们有一个很大的项目,有许多依赖项,几种风格和构建类型。由于ButterKnife崩溃导致构建失败时分裂APK

我试图根据official instruction拆分APK。但是,构建失败。我在我的项目上尝试了相同的步骤,一切都很顺利。

Stacktrace指出ButterKnife存在问题,但我无法得到如何解决它。

:bankOK:compileBetaNewApiDebugJavaWithJavac UP-TO-DATE 
:bankOK:mergeBetaNewApiDebugAssets UP-TO-DATE 
:bankOK:processBetaNewApiHdpiDebugManifest 
:bankOK:processBetaNewApiHdpiDebugResources FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':bankOK:processBetaNewApiHdpiDebugResources'. 
> Cannot invoke method replaceAll() on null object 

,异常是:

Exception is: 
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':bankOK:processBetaNewApiHdpiDebugResources'. 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) 
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) 
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66) 
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.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:53) 
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203) 
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185) 
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66) 
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50) 
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) 
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) 
Caused by: java.lang.NullPointerException: Cannot invoke method replaceAll() on null object 
    at butterknife.plugin.ButterKnifePlugin$_apply_closure1$_closure2$_closure3$_closure4.doCall(ButterKnifePlugin.groovy:32) 
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:590) 
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:571) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) 

没有任何人有任何想法可能是什么问题?

+0

post gradle也 –

+0

谢谢。我已经解决了这个问题,下面回答。 我不认为我们的巨大gradle文件在这里有帮助,因为它在我们不分裂apk的时候效果很好,因为我成功地分割了其他项目,所以它不是一个简单的问题,可以在没有整个项目的情况下进行调试现场也有同样的问题。 – Gaket

回答

0

根据Github上的thisthis问题,看起来ButterKnife插件存在一些问题。

删除插件的依赖关系并将其关闭可解决问题。

// commented: 
// apply plugin: 'com.jakewharton.butterknife' 

不幸的是,对一个库模块(即连接为apply plugin: 'com.android.library')使用ButterKnife除了这个插件没有别的办法,所以我从库模块移除它和刚刚离开它在主模块中作为通常的依赖关系:

annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0 
provided 'javax.annotation:jsr250-api:1.0' 
compile 'com.jakewharton:butterknife:8.6.0'