【问题标题】:Ionic Android build: java.lang.IllegalStateException: buildToolsVersion is not specifiedIonic Android 构建:java.lang.IllegalStateException:未指定 buildToolsVersion
【发布时间】:2016-03-23 00:04:52
【问题描述】:

从今天开始,不知何故,我的 ionic 项目由于某种原因不再能够构建。我已经尝试删除平台并重新添加它,但它没有工作。我现在几乎花了三个时间来升级、降级和重新安装 cordova 和 ionic,但由于某种原因,当我尝试构建 Android 版本时,我总是收到以下错误:

Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
    java.lang.IllegalStateException: buildToolsVersion is not specified.
            at com.google.common.base.Preconditions.checkState(Preconditions.java:176)
            at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:599)
            at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:566)
            at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:563)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
            at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:562)
            at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:559)
            at org.gradle.listener.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:109)
            at org.gradle.listener.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:98)
            at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:83)
            at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:31)
            at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
            at com.sun.proxy.$Proxy12.afterEvaluate(Unknown Source)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:79)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:65)
            at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:504)
            at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:83)
            at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42)
            at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:129)
            at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
            at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
            at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
            at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
            at org.gradle.util.Swapper.swap(Swapper.java:38)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:46)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
            at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
            at java.lang.Thread.run(Thread.java:745)

    FAILURE: Build failed with an exception.

我已经尝试在 config.xml 中设置 buildToolsVersion 但没有任何成功。以前有人遇到过同样的问题吗?

【问题讨论】:

    标签: android cordova ionic-framework


    【解决方案1】:

    我想通了,问题是由于配置错误的 config.xml 条目:

    <widget xmlns="http://www.w3.org/ns/widgets"
            xmlns:cdv="http://cordova.apache.org/ns/1.0"
            id="ch.papers.test"
            version="1.0.{BUILD_NUMBER}"
            android-versionCode="{BUILD_NUMBER}">...
    

    我们用于 Jenkins 配置。不幸的是,错误消息相当混乱。

    更新修正版:

    <widget xmlns="http://www.w3.org/ns/widgets"
            xmlns:cdv="http://cordova.apache.org/ns/1.0"
            id="ch.papers.test"
            version="1.0.0"
            android-versionCode="1">...
    

    【讨论】:

    • 我收到一个与您的完全相同的错误,但我检查了我的 config.xml 文件,它不包含与您的情况类似的任何内容。您能否再解释一下您的解决方案?
    • 我通过更改这两行代码解决了这个问题:version="1.0.{BUILD_NUMBER}" android-versionCode="{BUILD_NUMBER}" to version="1.0.0" android-versionCode ="1"
    • 就我而言,我使用 linux 命令 sed 用 Jenkins 的 BUILD_NUMBER 替换字符串,但它不起作用。问题是我在 sed 参数中使用了单引号 ' 而不是双引号 ",这样的事情对我有用:sed -i "s/CODE_VERSION/${BUILD_NUMBER}/g" config.xml
    • 在哪里可以找到 config.xml ??
    • 这应该位于您的项目根目录中。但请注意,这不是一个标准的 Android 项目,它是一个 ionic / cordova 项目。
    【解决方案2】:

    我遇到了这个问题。问题是我的 ANDROID_HOME 路径指向 Android Studio 的文件夹。我将其更改为指向我的 Android SDK 文件夹,问题就解决了。

    1. 检查您的 ANDROID_HOME:

    回显 $ANDROID_HOME

    1. 它应该指向 Android SDK 文件夹:

    导出 ANDROID_HOME="your-android-sdk-folder"

    【讨论】:

      【解决方案3】:

      我有同样的问题。我将其修复如下:-

      打开 Android Studio 配置。

      转到 config>SDK Manager>Android SDK>SDK Tools 并安装 Android SDK Build-Tools。

      检查 ANDROID_HOME 变量。我在mac上,所以它指向“/Users/user_name/Library/Android/sdk/”

      如果没有正确设置如下:-

      导出 ANDROID_HOME="/Users/user_name/Library/Android/sdk/"

      现在重新构建它,它应该可以正常工作了。

      PS:强烈推荐通过安装 Android Studio 获取 android sdk,而不是手动安装 sdk。这样就不会遇到不必要的麻烦了。

      【讨论】:

        【解决方案4】:

        我通过保存带有 Unix (LF) 行结尾的 build.gradle 和/或 build-extras.gradle 解决了这个问题。您的 android-versionCode 应该与您的 android sdk 的 buildversion 无关...

        【讨论】:

          猜你喜欢
          • 2016-09-19
          • 1970-01-01
          • 2017-12-07
          • 2018-05-03
          • 1970-01-01
          • 2016-05-03
          • 2016-10-01
          • 2021-11-01
          • 2020-02-25
          相关资源
          最近更新 更多