[√]Android NDK 编译报错

简介: [√]Android NDK 编译报错

Looking for a different daemon

Looking for a different daemon... Found daemon DaemonInfo{
    pid=3616, 
    address=[
        3144f9fe-2fea-41c1-a176-2039eaabae50 
        port:34100, 
        addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]
    ], 
    state=Idle, 
    lastBusy=1687680511356, 
    context=DefaultDaemonContext[
        uid=be4966ef-ef9d-4c68-815f-83fccf193c6c,
        javaHome=C:\Program Files\Java\jdk1.8.0_202,   
        daemonRegistryDir=C:\Users\cc\.gradle\daemon,
        pid=3616,idleTimeout=10800000,
        daemonOpts=-Xmx4096m,
        -Dfile.encoding=UTF-8,
        -Duser.country=CN,-Duser.language=zh,-Duser.variant
    ]
} 
however its context does not match the desired criteria. Java home is different.

这里的jdk版本有问题,202是我之前的一个版本,现在我是切换到了361

删除

  • C:\Users\cc.gradle\daemon
  • C:\Users\cc.gradle\native

compileDebugJavaWithJavac失败

> Task :libcocos2dx:compileDebugJavaWithJavac
Putting task artifact state for task ':libcocos2dx:compileDebugJavaWithJavac' into context took 0.0 secs.
file or directory 'frameworks\cocos2d-x\cocos\platform\android\libcocos2dx\src\main\java', not found
file or directory 'frameworks\cocos2d-x\cocos\platform\android\libcocos2dx\src\main\java', not found
file or directory 'frameworks\cocos2d-x\cocos\platform\android\libcocos2dx\src\debug\java', not found
file or directory 'frameworks\cocos2d-x\cocos\platform\android\libcocos2dx\build\generated\source\rs\debug', not found
Skipping task ':libcocos2dx:compileDebugJavaWithJavac' as it is up-to-date (took 0.006 secs).

一直提示这个报错,各种蛋疼的折腾都无法解决,根本就没有src\main\java,这个错误很明显是因为其他问题导致的后续错误,不是源头。

后来发现gradle.properties里面

PROP_APP_ABI=armeabi:armeabi-v7a:arm64-v8a # 加上abi
PROP_APP_ABI=armeabi:armeabi-v7a

和build.gradle里面

android {
    externalNativeBuild {
        ndkBuild {
            // 编译生成的目标abi
            abiFilters.addAll(PROP_APP_ABI.split(':').collect { it as String })
        }
    }
    defaultConfig {
        ndk {
            // 打包的目标abi
            abiFilters 'arm64-v8a' 
        }
    }
}

abi不一致导致的

在 Gradle 中,使用 externalNativeBuildndk 块来配置 NDK 构建时,主要区别如下:

  1. 语法和位置:externalNativeBuild 是一个 Gradle 插件,用于配置使用外部构建系统进行原生代码构建。它是在 android 块的直接子级中进行配置。而 ndk 是一个内置的 Android 构建插件,用于配置 NDK 构建相关的参数。它是在 android 块中的 defaultConfigbuildTypesproductFlavors 块的内部进行配置。
  2. 灵活性:externalNativeBuild 更为灵活,可以支持不同的外部构建系统,如 cmakendk-build 等。你可以根据需要选择最适合的构建系统,并通过 externalNativeBuild 配置其参数。而 ndk 只能用于配置使用 ndk-build 进行构建的情况。
  3. 文件位置: 如果使用 externalNativeBuild,你需要将外部构建系统的脚本文件(如 CMakeLists.txtAndroid.mk)放置在指定的位置,并使用 path 属性指定文件的路径。而 ndk 允许你将 NDK 构建脚本文件直接放置在默认的位置,Gradle 会自动查找和使用它们。
  4. ABI 过滤器:externalNativeBuild 中,你可以使用 abiFilters 属性指定需要构建的 ABI 列表,过滤掉其他不需要的 ABI。而在 ndk 块中,你可以直接在其内部使用 abiFilters 方法来设置相同的过滤器。

总的来说,externalNativeBuild 提供了更灵活的配置选项,可以适应不同的外部构建系统,并且需要手动指定构建脚本文件的位置。而 ndk 是 Android 默认的构建插件,只支持 ndk-build 构建系统,并且会自动查找并使用默认位置的构建脚本文件。

目录
相关文章
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
33 0
|
3月前
|
Java Shell Linux
Android——编译(一):编译make的基础知识
Android——编译(一):编译make的基础知识
71 0
|
3月前
|
Java Shell Linux
Android——编译(二):android.mk的相关知识
Android——编译(二):android.mk的相关知识
97 0
|
3月前
|
Shell Android开发
RK android13编译环境搭建与常用编译命令
RK android13编译环境搭建与常用编译命令
77 0
|
2月前
|
Java Android开发 C++
安卓SO层开发 -- 第一个NDK项目
安卓SO层开发 -- 第一个NDK项目
16 0
|
2月前
|
算法 Java Android开发
安卓逆向 -- NDK开发实现MD5算法
安卓逆向 -- NDK开发实现MD5算法
34 0
|
3月前
|
开发工具 Android开发
QGroundControl Qt安卓环境搭建及编译出现的问题
QGroundControl Qt安卓环境搭建及编译出现的问题
62 0
|
3月前
|
Java Go Android开发
Android——编译(三):android.bp的相关知识
Android——编译(三):android.bp的相关知识
167 0
|
4月前
|
编解码 Ubuntu Java
Android 编译Android7.0版本源码
Android 编译Android7.0版本源码
|
4月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
152 0