NDK 编译报错 SIMPLE: Error configuring

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

一、 发现问题

先来看下奇葩的报错:

7345261-d5f0800e3b8f30c9.png
SIMPLE: Error configuring

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

7345261-422afab7e65e4b05.png

二、定位问题

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

7345261-ccbe294f6e18bba1.png
assembleDebug

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

7345261-bc94ac2a87ef72ff.png
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 项目都可以跑起来,肯定是其它不可抗力。

7345261-cdcb441f9a2de1cc.png

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

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

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

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

    需要修改两个地方

    • gradle-wrapper.properties 文件的 distributionUrl 地址修改为可运行的项目中的。
    • build.gradle(这个是项目的,也就是外层的)文件的 classpath 修改为可运行的项目中的。
      7345261-3751cc934c0baf64.png
      要修改的文件

      修改完上面两个文件,再次编译正常,运行正常。

运气比较好,很快就解决问题了,分析这类问题的思路,一般还可以从 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 是什么。

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

7345261-5372f5c4d8c3d9d6.png

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

转载于:https://www.jianshu.com/p/fdb8b83cc07f

猜你喜欢

转载自blog.csdn.net/weixin_34356555/article/details/91139567