T O P

[资源分享]     cocos2dx 3.10新建工程在AndroidStudio3.4.2编译通过总结

  • By - 楼主

  • 2019-10-19 16:48:00
    • 将Gradle Plugin Version和Gradle Version升到最新,分别是3.4.2,5.1.1。编译出的apk分析
      这时打出来的apk包没有libcocos2d.so库和资源文件。原因是build.gradle的配置里没有libcocos2d.so编译的流程配置,所以没有跑引擎的编译。
    • 在app的build.gradle的android{}包下增加ndkbuild相关流程,如下图:增加ndkBuild
      这时再度编译出现报错:
    • 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相关参数
      ndkBuild参数设置
      这时出现报错

    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版本中,就可以解决这个问题。
      这里遇到下面报错:
      找不到头文件
      看意思是找不到头文件,原因是这个头文件是区分sdk的platform版本的,需要在Application.mk里面指定版本。
    • 在jni/Application.mk里面加入APP_PLATFORM := android-16,由于这个值要和minSdkVersion对应,故也把项目和库的两个build.gradle下的minSdkVersion也配置成16。
      这时,引擎就能正常编译成功了。打出来的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++层判断的,可直接改这里的代码,直接写死竖屏即可。

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册


Image

13023878061 1

AAA