关于cocos2d-x 3.17版本静态库的使用方法

之前在求教cocos2d-x 3.17版本的cpp-empty-test的release的静态库构建失败的问题中,提到过使用静态库来减少编译时间(仅针对android),那篇帖子中放出过原来使用过的构建方法及使用方法,但由于在修改release的构建失败的问题中,修改过Android.mk文件,导致可能无法正常使用,下面放出可以正常使用的Android.mk文件,静态库由debug构建,新建一个项目,编译完成后测试通过(真机测试)。

下面是构建静态库后的Android.mk
Android.rar (2.5 KB)

下面是新建项目中app/jni目录下的Android.mk
Android.rar (643 字节)

构建静态库的方法:
官网文档链接:http://docs.cocos.com/cocos2d-x/manual/zh/editors_and_tools/prebuilt_libraries.html

我是使用下面方式构建了3个架构的库,debug模式
cocos gen-libs -c -p android -app-abi armeabi-v7a:arm64-v8a:x86

release模式如下:
cocos gen-libs -c -p android -app-abi armeabi-v7a:arm64-v8a:x86 -m release

使用以上命令行方式执行前,请确保已设置好环境变量。

构建成功后,会在cocos2d-x 3.17的安装目录下生成prebuilt/android/$(TARGET_ARCH_ABI)目录,每个目录下均含有17个构建好的.a库文件。

然后可以将官网已构建好的库都复制到prebuilt/android/$(TARGET_ARCH_ABI)中,如下图中,我复制完毕的库,总共34个。还有几个暂时未用到,没有复制过来。

将前面下载的第一个Android.rar解压到prebuilt/android目录下,如下图

到此静态库部分构建完毕,下面进行测试,我测试过程未使用到Android Studio,均在命令行下完成。

新建项目:
cocos new HelloWorld -p com.cocos2d-x.org -l cpp -d D:/Cocos/Test

项目创建完成后,进入对应的项目目录,如D:/Cocos/Test/HelloWorld/proj.android,在这个目录下执行:
cocos compile -p android --android-studio --ap android-27

等待编译打包完成,因为已经构建好静态库,整个新建项目的编译大概1分20秒左右完成(受硬件配置影响,这里的时间可能有所不同),节省大量编译库的时间,然后测试apk,真机测试通过。

下面说下我这里编译环境各工具的版本号,至于环境变量的设置就不多说了。
cocos2d-x 3.17版本
jdk 8u172
Android Studio 3.1.2
sdk 27
build tools 27.0.3
ndk r16
gradle 4.4
gradle plugin 3.1.2

新建的项目,我修改了以下几个文件中涉及到的版本号。
项目目录下gradle.properties文件中(D:/Cocos/Test/HelloWorld/proj.android/gradle.properties)
原:PROP_BUILD_TOOLS_VERSION=27.0.1
改:PROP_BUILD_TOOLS_VERSION=27.0.3

原:PROP_APP_ABI=armeabi-v7a
改:PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86
如果不需要这么多架构,选择需要进行设置

构建静态库release版本时,出现的aapt错误,需要在这个文件添加以下设置
android.enableAapt2=false
(注意:添加这个设置后,Android Studio中编译会提示设为true,否则编译不过去,命令行无问题,这个问题是之前帖子中提到的,感谢leda的解答。)

项目目录下build.gradle文件中的修改(D:/Cocos/Test/HelloWorld/proj.android/build.gradle)
原:classpath ‘com.android.tools.build:gradle:3.0.0’
改:classpath ‘com.android.tools.build:gradle:3.1.2’

项目目录下gradle/wrapper目录中gradle-wrapper.properties文件(D:/Cocos/Test/HelloWorld/proj.android/gradle/wrapper/gradle-wrapper.properties)
原:distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
改:distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip

项目目录下app/jni目录中Application.mk文件(D:/Cocos/Test/HelloWorld/proj.android/app/jni/Application.mk)
原:APP_ABI := armeabi-v7a
改:APP_ABI := armeabi-v7a arm64-v8a x86
这里与前面的设置对应

添加一句
APP_PLATFORM := android-27

文件的修改部分完成,将之前的第二个Android.rar包解压到项目目录下app/jni,覆盖Android.mk,就可通过命令行进行编译了。

说到底就是Android.mk的配置问题,构建好静态库后,就需要自己设置Android.mk文件,添加静态库以及包含文件的目录。

另外,通过我这样的方式使用静态库,虽然减少了编译时间,但却大大的增加的apk的容量,当然,这个问题也是可以解决的,就是修改LOCAL_WHOLE_STATIC_LIBRARIES为LOCAL_STATIC_LIBRARIES,但这样修改后,就要调整加载库的顺序了,这个可以自己去完成,我这里仅提供了一种静态库的使用方式而已,可能很多朋友都在使用静态库来编译cocos2d-x项目了,但网上资料却很少,而3.17版本的几乎没有,我之前提问时,leda说需要使用静态库来减少编译时间的方法,我答应会提供,于是有了这篇帖子。

1赞

非常感谢楼主,你这解决了一个大难题,想使用 Android 预编译库的开发者非常幸运。

我把楼主上传的 Android.mk 稍稍改动了一下,重新打包上传,使用起来可能更方便一点

  1. 不用拷贝 external 目录的静态库,直接改变路径引用
  2. 改进部分中文描述,增加英文注释,方便国外开发者学习

UseAndroidGenLibs.zip (22.1 KB)

国外开发者也问到这个问题

https://discuss.cocos2d-x.org/t/cocos2dx-v3-17-prebuilt-mk-is-not-generated/42670

大神,你好,我想知道官网的构建好的静态库在哪里下载

官网没有,3.17 配置好环境后,使用这个命令构建

cocos gen-libs -h

我用了这个命令cocos gen-libs -c -p android -app-abi armeabi-v7a:arm64-v8a:x86
生成的没有那么多个,
这条命令cocos gen-libs -c -p android -app-abi armeabi-v7a:arm64-v8a:x86是帮助的。
官网构建好的我们要怎么生成呢

没有生成那么多个是正确的,楼主是把 external 目录中第三方库的 lib 也拷贝出来了,所以这么多。

你用二楼我上传的那个不用拷贝 external 的 lib,建议大概了解一下 Android.mk 是怎么工作的,不要盲目拷贝粘贴。

这个在3.17.1里边又改了,cocos gen-libs命令也没有了,实现方式又变了吧:disappointed_relieved: