如何让Android使用Flavors制作渠道包不用ndk重编译?

旧主题再发一遍(原主题答案并不是我想要的):
传送门:如何让Android使用Flavors制作渠道包不用ndk重编译?
Creator 版本:Creator3.7.3

我们的Android工程定义了不同的flavors,来打包不同的渠道sdk,定义如下:


这些flavors,仅仅用于安卓部分,接入不同的安卓sdk,根据不同渠道,做不同处理。

原生引擎部分编译,就是cocos自带的cmake编译
image

现在问题来了,每个渠道打包,引擎原生代码都会编译一遍。然后生成一个对应的xxxRelease目录,这样相当费时,而且没有必要。
因为我们没有修改任何引擎原生代码。每一次重新编译的代码都是一模一样的。
image

传送门里面答案提到的使用预打包好的.so文件,直接拷贝,而不再执行externalNativeBuild,这种解决方案有两个问题,
1,Creator自带的功能模块裁剪不再生效,包体会增大。
2,不够通用,当不同的项目,使用了不同的物理引擎,这个so就没法通用了,而且根据我的经验,如果使用通用.so,spine模块勾选了的情况下,dragonbones也必须勾选,不然安卓会报错。这种方案存在一定的风险。如下图展示了多种.so可能,且无法通用的情况。

所以,重点来了
我的问题是,有没有办法,让externalNativeBuild(原生编译 cmake or ndk),不论定义了多少个flavor,
永远只有两个编译目录,relase和debug。所有flavors共享。原生编译并不为flavors做区分???

我认为的最理想的方案
对于每个Creator3D项目,在勾选完功能裁剪之后,原生引擎(c++)代码,只需要编译一遍就可以了。
后面再打包,不再重新反复编译。

你可以将cocos引擎的代码单独做成一个 library module

然后通过 marven 插件将cocos的这一块弄成一个 library module,然后通过 marven publish 构建出 aar ,以后就只需要依赖这个 aar 即可

在制作 aar 上,以下是一些参考文章

谢谢,这种方案确实可以,现在的Creator3.x的安卓部分似乎就是这样分的,稍加改造就可以了。构造出来的cocos的这个library module是可以没有flavors。

我先试试

已经成功使用library module的方式,来避免flavors导致的c++代码重复编译。
具体方式,就是参照Creator3.x安卓工程的libservice创建一个库libnative。具体结构如下。
image

库里面仅仅做原生代码编译工作。添加下列代码即可。

然后在主项目的build.gradle中引用这个libnative库就可以了。
image

现在编译后就只剩下release debug了,跟flavors定义无关
image