分享一下 cocos2d-x 3.17.2 打包安卓遇到的各种问题

我是需要继承Admob,因为最新的Admob需要使用androidX, 如果你不用使用androidX,那么有些问题就不会遇到。

1.Program type already present: android.support.v4.app.INotificationSideChannel
使用最新的Android Studio,至少为 3.2

2.Parameter specified as non-null is null: method com.android.build.gradle.internal.cxx.configure.JsonGenerationVariantConfiguration., parameter ndkVersion
使用最新的ndk,至少大于 r10c,并且修改local.properties(如果里面有ndk的路径)

3.-WARNING: API ‘variant.getMergeAssets()’ is obsolete and has been replaced with ‘variant.getMergeAssetsProvider()’.
替换 variant.mergeAssets.doLast 为 variant.mergeAssetsProvider.get().doLast

4.命令行编译修改为ndk-build, 通常不需要用命令行编译,直接用AS的run按钮,会连带C++一起编译
…/cocos2d-x-3.17.2/tools/cocos2d-console/plugins/plugin_compile/project_compile.py
self._build_type = self.check_param(args.build_type, ‘ndk-build’,
AS里面 修改 gradle.properties 的 PROP_BUILD_TYPE=ndk-build

5.C++ 打印log 到命令行
#include <stdio.h>
#include <stdbool.h>
#include <android/log.h>

#define LOG_TAG "JNI"
#define DEBUG

#ifdef DEBUG
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__))
#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))
#else
#define LOGD(...) ;
#define LOGI(...) ;
#define LOGW(...) ;
#define LOGE(...) ;
#endif

6.如果你遇到 cocos2d/cocos/2d/CCActionProgressTimer.cpp:78: error: undefined reference to ‘cocos2d::ui::LoadingBar::getPercent() const’
这个问题,需要修改Android.mk
LOCAL_STATIC_LIBRARIES += cocos_ui_static
$(call import-module,ui)
但是仅仅修改这两行是不行的。也许还需要修改build.gradle 里面的 externalNativeBuild
但是如何修改,我也不知道。官方没有解释,或许你可以研究下cmake
我的项目没有使用UI module,只是使用了CCProgressTimer,所以我自己重写了CCProgressTo Action
,然后把CCActionProgressTimer.cpp 关于ui的地方删除掉。

7.如果使用ndk-build, 项目所在的整个路径,不能有空格。

1赞