Cocos Creator 3 build with sdkbox failed

Hi all, I added IAP plugin to the cocos creator project and getting error while make project:

  FAILED: D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/build/android/proj/build/Google_Play_Template_ADS_and_Purchase/intermediates/cmake/release/obj/armeabi-v7a/libcocos.so 
  cmd.exe /C "cd . && C:\Users\horch\AppData\Local\Android\Sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi21 --gcc-toolchain=C:/Users/horch/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/horch/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security  -frtti -fexceptions -fsigned-char -Oz -DNDEBUG  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libcocos.so -o D:\my_work\cocos_creator\projects\Google_Play_Template_ADS_and_Purchase\build\android\proj\build\Google_Play_Template_ADS_and_Purchase\intermediates\cmake\release\obj\armeabi-v7a\libcocos.so @CMakeFiles/cocos.rsp  && cd ."
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::onRestoreComplete(bool, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&): error: undefined reference to 'sdkbox::EventManager::getInstance()'
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::onRestoreComplete(bool, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&): error: undefined reference to 'sdkbox::EventManager::postEvent(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, void*)'
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::__notifyByProduct(sdkbox::Product const&): error: undefined reference to 'sdkbox::EventManager::getInstance()'
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::__notifyByProduct(sdkbox::Product const&): error: undefined reference to 'sdkbox::EventManager::postEvent(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, void*)'
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::onPurchaseResult(sdkbox::PayResultCode, char const*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&): error: undefined reference to 'sdkbox::EventManager::getInstance()'
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::onPurchaseResult(sdkbox::PayResultCode, char const*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&): error: undefined reference to 'sdkbox::EventManager::postEvent(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, void*)'
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::onPurchaseResult(sdkbox::PayResultCode, char const*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&): error: undefined reference to 'sdkbox::EventManager::postEvent(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, void*)'
  D:/my_work/cocos_creator/projects/Google_Play_Template_ADS_and_Purchase/native/engine/android/app/jni/PluginIAP/libs_c++_static/armeabi-v7a/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::purchase(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&): error: undefined reference to 'sdkbox::EventManager::getInstance()'
  clang++: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.

@htlxyz do you have any thoughts?

FAILED: D:/my_work/cocos_creator/projects/Google_Template/build/android/proj/build/Google_Template/intermediates/cmake/release/obj/armeabi-v7a/libcocos.so 

cmd.exe /C "cd . && C:\Users\horch\AppData\Local\Android\Sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi21 --gcc-toolchain=C:/Users/horch/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/horch/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security  -frtti -fexceptions -fsigned-char -Oz -DNDEBUG  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libcocos.so -o D:\my_work\cocos_creator\projects\Google_Template\build\android\proj\build\Google_Template\intermediates\cmake\release\obj\armeabi-v7a\libcocos.so @CMakeFiles/cocos.rsp  && cd ."

D:/my_work/cocos_creator/projects/Google_Template/native/engine/android/app/jni/PluginSdkboxAds/libs_c++_static/armeabi-v7a/libPluginSdkboxAds.a(PluginSdkboxAds_AndroidProxy.o):function sdkbox::PluginSdkboxAdsNativeBridgeAdObserver::operator()(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, _jobject*): error: undefined reference to 'sdkbox::intToAdActionType(int)'

D:/my_work/cocos_creator/projects/Google_Template/native/engine/android/app/jni/PluginSdkboxAds/libs_c++_static/armeabi-v7a/libPluginSdkboxAds.a(PluginSdkboxAds_AndroidProxy.o):function sdkbox::PluginSdkboxAdsNativeBridgeAdObserver::operator()(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, _jobject*): error: undefined reference to 'sdkbox::AdActionTypeToString(sdkbox::AdActionType)'

D:/my_work/cocos_creator/projects/Google_Template/native/engine/android/app/jni/PluginSdkboxAds/libs_c++_static/armeabi-v7a/libPluginSdkboxAds.a(PluginSdkboxAds_AndroidProxy.o):function sdkbox::PluginSdkboxAdsNativeBridgeAdObserver::operator()(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, _jobject*): error: undefined reference to 'sdkbox::AdTrackingToString(sdkbox::AdActionType)'

clang++: error: linker command failed with exit code 1 (use -v to see invocation)

ninja: build stopped: subcommand failed.

41 actionable tasks: 8 executed, 33 up-to-date

It happens when I add IAP and AdMob plugins:


If I add just one of them, everything works…
I assume they override each other or something, and broke the other plugin.

we will look into this issue ASAP.

I have tested build creator3 with iap and admob. and success. following is the test project.

and for your issue, you can check compare this file with yours.

I compared sdk box extension from sample and my case, I see in my project Admob also imports SDKBOX ads, maybe problem with this…
also I am using Cocos Creator 3.3.2
left - sample project, right - my

  FAILED: D:/my_work/cocos_creator/projects/Google_Template/build/android/proj/build/Google_Template/intermediates/cmake/release/obj/armeabi-v7a/libcocos.so 
  cmd.exe /C "cd . && C:\Users\horch\AppData\Local\Android\Sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi21 --gcc-toolchain=C:/Users/horch/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/horch/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security  -frtti -fexceptions -fsigned-char -Oz -DNDEBUG  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libcocos.so -o D:\my_work\cocos_creator\projects\Google_Template\build\android\proj\build\Google_Template\intermediates\cmake\release\obj\armeabi-v7a\libcocos.so @CMakeFiles/cocos.rsp  && cd ."
  D:/my_work/cocos_creator/projects/Google_Template/native/engine/android/app/jni/PluginSdkboxAds/libs_c++_static/armeabi-v7a/libPluginSdkboxAds.a(PluginSdkboxAds_AndroidProxy.o):function sdkbox::PluginSdkboxAdsNativeBridgeAdObserver::operator()(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, _jobject*): error: undefined reference to 'sdkbox::intToAdActionType(int)'
  D:/my_work/cocos_creator/projects/Google_Template/native/engine/android/app/jni/PluginSdkboxAds/libs_c++_static/armeabi-v7a/libPluginSdkboxAds.a(PluginSdkboxAds_AndroidProxy.o):function sdkbox::PluginSdkboxAdsNativeBridgeAdObserver::operator()(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, _jobject*): error: undefined reference to 'sdkbox::AdActionTypeToString(sdkbox::AdActionType)'
  D:/my_work/cocos_creator/projects/Google_Template/native/engine/android/app/jni/PluginSdkboxAds/libs_c++_static/armeabi-v7a/libPluginSdkboxAds.a(PluginSdkboxAds_AndroidProxy.o):function sdkbox::PluginSdkboxAdsNativeBridgeAdObserver::operator()(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, _jobject*): error: undefined reference to 'sdkbox::AdTrackingToString(sdkbox::AdActionType)'
  clang++: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.
  

I will check the sdkboxAds plugin.

and you can remove sdkboxAds if you haven’t used sdkboxAds api.

the reason maybe the way to link ext_sdkbox.

check your file native/engine/android/CMakeLists.txt

make sure ext_sdkbox is the last one added into target_link_libraries.

# PluginIAP
add_definitions(-DSDKBOX_ENABLED)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/app/jni/PluginIAP/)
target_link_libraries(${LIB_NAME} ext_PluginIAP)

# PluginAdMob
add_definitions(-DSDKBOX_ENABLED)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/app/jni/PluginAdMob/)
target_link_libraries(${LIB_NAME} ext_PluginAdMob)

# PluginSdkboxAds
add_definitions(-DSDKBOX_ENABLED)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/app/jni/PluginSdkboxAds/)
target_link_libraries(${LIB_NAME} ext_PluginSdkboxAds)

# lib-sdkbox
add_definitions(-DSDKBOX_ENABLED)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/app/jni/sdkbox/)
target_link_libraries(${LIB_NAME} ext_sdkbox)


target_link_libraries(${LIB_NAME}
    "-Wl,--whole-archive" cocos2d_jni "-Wl,--no-whole-archive"
    cocos2d
)

target_include_directories(${LIB_NAME} PRIVATE
    ${CMAKE_CURRENT_LIST_DIR}/../common/Classes
)

Thanks for replay, really, lines:

# lib-sdkbox
add_definitions(-DSDKBOX_ENABLED)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/app/jni/sdkbox/)
target_link_libraries(${LIB_NAME} ext_sdkbox)

were totally missing in this file (don’t know why). Now it builds and mades.

Also, how can I delete SDKBox Ads plugin? It imported automatically when I imported AdMob. I don’t see any delete button in the extension.
Thanks.

main work is probably be those:

remove native/engine/android/app/jni/PluginSdkboxAds
remove native/engine/android/app/libs/PluginSdkboxAds.jar
remove native/engine/ios/PluginSdkboxAds.framework
remove SDKBoxAds related config in cmake, xcodeproj, .sdkbox_packages.jsonfile.