cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结

直接编译工程出现以下报错:
cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结_第1张图片
说是当前Gradle版本不支持这个函数。

  • 将Gradle Plugin Version和Gradle Version升到最新,分别是3.4.2,5.1.1。

接下来出现如下报错:
cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结_第2张图片
原因是要更新Gradle但没配置好仓库地址,故在Project: build gradle配置文件加入国内的仓库地址:
maven { url “http://maven.aliyun.com/nexus/content/groups/public/” }
jcenter()
google()
这时出现如下问题:
cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结_第3张图片
这时打出来的apk包没有libcocos2d.so库和资源文件。原因是build.gradle的配置里没有libcocos2d.so编译的流程配置,所以没有跑引擎的编译。

  • 在app的build.gradle的android{}包下增加ndkbuild相关流程,如下图:cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结_第4张图片
    这时再度编译出现报错:
  • What went wrong:
    Execution failed for task ‘:pure310portrait:generateJsonModelDebug’.
    Build command failed.
    Error while executing process /Users/dangang/Library/Android/android-ndk-r10c/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/jni/Android.mk NDK_APPLICATION_MK=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/jni/Application.mk APP_ABI=armeabi NDK_ALL_ABIS=armeabi NDK_DEBUG=1 APP_PLATFORM=android-3 NDK_OUT=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/debug/lib APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n}
    Android NDK: /Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/jni/Android.mk: Cannot find module with tag ‘scripting/lua-bindings/proj.android’ in import path
    Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?
    Android NDK: The following directories were searched:
    Android NDK:

看报错信息是NDK 编译时的arguments传得不对造成的,NDK_MODULE_PATH这个参数没有设置。

  • 于是参考cocos2dx 3.17的相应build.gradle的配置再在app的build.gradle加入ndkBuild相关参数
    cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结_第5张图片
    这时出现报错

Build command failed.
Error while executing process /Users/dangang/Library/Android/android-ndk-r10c/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/jni/Android.mk NDK_APPLICATION_MK=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/jni/Application.mk APP_ABI=arm64-v8a NDK_ALL_ABIS=arm64-v8a NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=/Users/dangang/workspace/pure310portrait/frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/debug/lib NDK_TOOLCHAIN_VERSION=clang -j8 NDK_MODULE_PATH=/Users/dangang/workspace/pure310portrait/frameworks/cocos2d-x:/Users/dangang/workspace/pure310portrait/frameworks/cocos2d-x/cocos:/Users/dangang/workspace/pure310portrait/frameworks/cocos2d-x/external APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n}
Android NDK: ERROR:/Users/dangang/workspace/pure310portrait/frameworks/cocos2d-x/external/lua/luajit/prebuilt/android/Android.mk:luajit_static: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that /Users/dangang/workspace/pure310portrait/frameworks/cocos2d-x/external/lua/luajit/prebuilt/android/arm64-v8a/libluajit.a exists or that its path is correct

  • 再在app下的build.gradle下的defultConfig闭包加入ndk配置ndk生成库的相关配置
    这时候引擎能开始跑编译了。这时可能会出现下面报错
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    这是由于NDK版本不兼容导致的。
  • 修改local.properties,将NDK改为r10c版本。
    这时再跑出现如下错误:

Parameter specified as non-null is null: method com.android.build.gradle.internal.cxx.configure.JsonGenerationVariantConfiguration., parameter ndkVersion

这是因为所使用的的NDK版本不适配的问题,高版本的NDK被使用时会被从source.properties文件获取NDK的版本号我们现在使用的NDK版本没有这个文件。

  • 找到高版本的NDK版本复制source.properties文件到使用的NDK版本中,就可以解决这个问题。
    这里遇到下面报错:
    cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结_第6张图片
    看意思是找不到头文件,原因是这个头文件是区分sdk的platform版本的,需要在Application.mk里面指定版本。
  • 在jni/Application.mk里面加入APP_PLATFORM := android-16,由于这个值要和minSdkVersion对应,故也把项目和库的两个build.gradle下的minSdkVersion也配置成16。

这时在编译过程中出现如下错误:
cocos2dx 3.10、3.14新建工程在AndroidStudio3.4.2、3.5.2编译通过总结_第7张图片
原因是给到我的模板工程中用到了一段代码但只支持iOS,故把这段代码注释掉即可。

这时,引擎就能正常编译成功了。打出来的apk包解析能看到libcocos2dlua.so文件。
但是发现apk没有项目的脚本和资源文件。

  • 针对没有资源和脚本的问题有两种处理方法:
    一则最简单直接,在安卓工程下的app目录直接新建一个assets目录,将资源和脚本拷到这个目录即可。
    二则是配置build.gradle,在工程编译阶段自动拷贝资源到assets目录,(下面代码可能目录结构层次不对,自行调整)
android.applicationVariants.all { variant ->
    delete "${projectDir}/assets"
    def targetName = variant.name.capitalize()
    def copyTaskName = "copy${targetName}ResourcesToAssets"

    tasks.register(copyTaskName) {
        copy {
            from "${projectDir}/../../../../res"
            into "${projectDir}/assets/res"
        }

        copy {
            from "${projectDir}/../../../../src"
            into "${projectDir}/assets/src"
        }
	}
	tasks.getByName("pre${targetName}Build").dependsOn copyTaskName
}

一些警告要处理:

  • gradle的compile语句警告处理:
    compile警告这个警告是因为的新版本的gradle compile语句已经被抛弃,改用api语句,两者的功能完全一样,故将build.gradle的compile 替换成api即可。注意项目和引擎的两个gradle都要改。

SDK Build Tools版本问题
警告说我们配置的版本22.0.1太旧了,直接帮你用28.0.3来编译,为去除这个警告,将版本号改为28.0.3即可。

其它问题:
可能会出现创建了竖屏项目却无法竖屏问题,即使将AndroidManifest.xml的android:screenOrientation已经设为portrait也无法竖屏。
原因是在AppActivity的onCreate时会设置一次横竖屏,从代码看是在C++层判断的,可直接改这里的代码,直接写死竖屏即可。

你可能感兴趣的:(cocos,技术)