NDK 编译报错 SIMPLE: Error configuri

作者: JamFF | 来源:发表于2019-05-31 08:52 被阅读7次

首先项目肯定没问题,去年写的好好的项目,今天 clone 下来根本跑不起来,编译直接报错:SIMPLE: Error configuring,除此以外没有任何信息,网上的资料很少,也基本上都没什么用。

一、 发现问题

先来看下奇葩的报错:

SIMPLE: Error configuring

有没有搞错,我肯定知道配置错误啊,但你一点提示都不给啊!

二、定位问题

我们要搞点事情,根据多年工作经验 assemble 一下,assembleassembleDebugassembleRelease 这些运行哪个都无所谓,我们只要拿到编译时的日志。

assembleDebug

日志来了,我们只关注红色 Error 信息:

image.png

这就是关键信息了:

CMake Error: CMake was unable to find a build program corresponding to "Ninja".
CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.

意思大致是,CMake 不能找到 Ninja 构建程序,没有设置 CMAKE_MAKE_PROGRAM。

三、分析问题

赶时间,可以跳过,直接看第四步。

Ninja 这东西确实没有用过,也没有安装过,网上其它文章的解决办法,基本都是对 Ninja 下手,太狠了!

但是,我写的项目怎么可能问题!况且,新建一个 NDK 项目都可以跑起来,肯定是其它不可抗力。


我可不想随便装个不了解的 Ninja 就草草了事,改 bug 使我快乐,下面就将两个项目对比一下。

  1. CMakeLists.txt
    首先看它,因为是 CMake 构建失败。检查结果没有问题。

  2. build.gradle
    这个是 Module 下的 build.gradle,因为这里对 CMake 进行了配置。检查结果没有问题。

  3. gradle
    由于之前项目是正常的,现在构建出问题,根据多年工作经验,很有可能是 gradle 升级后出现的问题。

    需要修改两个地方

    • gradle-wrapper.properties 文件的 distributionUrl 地址修改为可运行的项目中的。
    • build.gradle(这个是项目的,也就是外层的)文件的 classpath 修改为可运行的项目中的。
      要修改的文件
      修改完上面两个文件,再次编译正常,运行正常。

运气比较好,很快就解决问题了,分析这类问题的思路,一般还可以从 NDK 版本、CMake 版本入手,我后面尝试了不修改 gradle,只降低 NDK 版本,还是不能正常编译的,说明并不是 NDK 版本问题。

四、解决问题

先说下我的环境,Android Studio 3.4.1,NDK r19c,CMake 3.10.2

  1. 修改 gradle-wrapper.properties 文件
    修改 distributionUrl,改为你能运行的其它项目的内容,构建时会按照这个地址下载 gradle。
#Wed May 29 18:30:37 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# 改为你能运行的其它项目的内容,构建时会按照这个地址,下载gradle
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
  1. 修改外层 build.gradle
    修改 classpath,这里需要修改为你能运行的其它项目的内容,这个是 gradle 插件版本,这个版本一般与Android Studio 的版本一致。
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        // 改为你能运行的其它项目的内容,这个是 gradle 插件版本,一般与Android一般与Android Studio 的版本一致。
        classpath 'com.android.tools.build:gradle:3.4.1'
        

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

五、最后

其实构建、编译失败都是很好解决的,关键还是分析的思路。

现在网络很发达,不要一味相信那些解决办法,要抱着质疑的态度,多搜索,多尝试。

就像遇到这个的问题,大多数人一顿操作猛如虎,噼里啪啦几个命令,装上了 Ninja,根本原因其实没有解决,就算解决了,绝大多数人也不会去了解 Ninja 是什么。

当然我的解决办法不一定适用于你,也要带着质疑的眼光去尝试,这样才能不断进步。

好了,我要跑去 Ninja 那边看一眼了:使用 Ninja 代替 make

相关文章

网友评论

    本文标题:NDK 编译报错 SIMPLE: Error configuri

    本文链接:https://www.haomeiwen.com/subject/xrlitctx.html