解决cocos lua 3.17 由于路径过长导致NDK编译失败的BUG

新建lua空项目,在编译时出现 “xx.h file not found” 或者 "xx.o file not found"时,一般是由于window下路径过长而导致的。
3.17 修改了gradle的配置, 删除了在gradle中配置NDK_MODULE_PATH参数的配置,在android.mk文件中使用了"call import-add-path"来导入模块路径。
我也不清楚使用参数传入NDK_MODULE_PATH与在android.mk文件中import有什么差别,有清楚的大佬请回复下.
在NDK编译时,使用NDK_MODULE_PATH传入参数传入模块路径,编译成功,以下是把3.17 gradle 修改到3.16后的代码,编译成功。

注释 jni/android.mk 中的模块导入语句
`#$(call import-add-path, $(LOCAL_PATH)/../../../cocos2d-x`
注释cocos/scripting/lua-bindings/proj.android/android.mk中的模块导入语句
    #$(call import-add-path,$(LOCAL_PATH)/../../../..)
    #$(call import-add-path,$(LOCAL_PATH)/../../../../external)
编辑模块gradle文件
    ...
    import org.apache.tools.ant.taskdefs.condition.Os
    ...
            externalNativeBuild {
                if (PROP_BUILD_TYPE == 'ndk-build') {
                    ndkBuild {
                        /* 3.17 arguments */
                        // targets 'cocos2dlua'
                        // arguments 'NDK_TOOLCHAIN_VERSION=clang'
                        // arguments '-j' + Runtime.runtime.availableProcessors()
                        /* 使用3.16配置 ndk_module_path,解决文件路径过长的问题 */
                        if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
                            // skip the NDK Build step if PROP_NDK_MODE is none
                            targets 'cocos2dlua'
                            arguments 'NDK_TOOLCHAIN_VERSION=clang'
                            // arguments 'APP_PLATFORM=android-'+PROP_APP_PLATFORM

                            def module_paths = [project.file("../../../../cocos2d-x").absolutePath,
                                                project.file("../../../../cocos2d-x/cocos").absolutePath,
                                                project.file("../../../../cocos2d-x/external").absolutePath]
                            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                                // should use '/'
                                module_paths = module_paths.collect {it.replaceAll('\\\\', '/')}
                                arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
                            }
                            else {
                                arguments 'NDK_MODULE_PATH=' + module_paths.join(':')
                            }

                            arguments '-j' + Runtime.runtime.availableProcessors()
                        }
                    }
                }
                else if (PROP_BUILD_TYPE == 'cmake') {
                    cmake {
                        arguments "-DCMAKE_FIND_ROOT_PATH=", "-DANDROID_STL=c++_static", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_NEON=TRUE", \
                                  "-DUSE_CHIPMUNK=TRUE", "-DUSE_BULLET=TRUE", "-DBUILD_LUA_LIBS=TRUE"
                        cppFlags "-frtti -fexceptions"
                        // prebuilt root must be defined as a directory which you have right to access or create if you use prebuilt
                        // set "-DGEN_COCOS_PREBUILT=ON" and "-DUSE_COCOS_PREBUILT=OFF" to generate prebuilt,  this way build cocos2d-x libs
                        // set "-DGEN_COCOS_PREBUILT=OFF" and "-DUSE_COCOS_PREBUILT=ON" to use prebuilt, this way not build cocos2d-x libs
                        //arguments "-DCOCOS_PREBUILT_ROOT=/Users/laptop/cocos-prebuilt"
                        //arguments "-DGEN_COCOS_PREBUILT=OFF", "-DUSE_COCOS_PREBUILT=OFF"
                    }
                }
            }

Android.mk 的路径寻找比较 “蠢”。比如有 cd ./current_dir/.. 实际目录没前进也没后退,等于 cd ./ 。但是 Android.mk 并不会自动处理并缩短路径。


可能 Gradle 更智能,会自动的去优化路径。

多谢反馈,已提 PR 纠正这一点

https://github.com/cocos2d/cocos2d-x/pull/19045