Android包启动时闪退, 提示错误: No implementation found for void org.cocos2dx.lib.Cocos2dxHelper.nativeSetApkPath(java.lang.String)

通过MAC工程打Android包, 可以编译成功, 但是打出来的包真机上启动时闪退.

运行环境信息:(MAC)
cocos2d-x-3.7.1
android-ndk-r10d
apache-ant-1.9.4
gradle-3.2.1

报错堆栈信息如下:
java.lang.UnsatisfiedLinkError: No implementation found for void org.cocos2dx.lib.Cocos2dxHelper.nativeSetApkPath(java.lang.String) (tried Java_org_cocos2dx_lib_Cocos2dxHelper_nativeSetApkPath and Java_org_cocos2dx_lib_Cocos2dxHelper_nativeSetApkPath__Ljava_lang_String_2)
at org.cocos2dx.lib.Cocos2dxHelper.nativeSetApkPath(Native Method)
at org.cocos2dx.lib.Cocos2dxHelper.init(Cocos2dxHelper.java:120)
at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:292)
at org.hcg.IF.IF.onCreate(IF.java:442)
at org.hcg.stac.empire.common.activity.CommonActivity.onCreate(CommonActivity.java:17)
at com.clash.of.kings.EmpireActivity.onCreate(EmpireActivity.java:87)
at android.app.Activity.performCreate(Activity.java:8214)
at android.app.Activity.performCreate(Activity.java:8202)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4033)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4247)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2613)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8668)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

已检查cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp中有存在方法Java_org_cocos2dx_lib_Cocos2dxHelper_nativeSetApkPath

求教此问题如何解决, 万分感谢。

:upside_down_face:

lib库打进去了吗。看看apk包。对应路径有没有

查看了, lib/armeabi下面没有libcocos2dcpp.so, 请问如何处理?

如果 lib 目录下没有任何 abi 的平台库,那么你的 c++代码可能没有执行编译,你用 android studio 构建的时候,就可以关注下编译日志。如果真没有编译,那就是 gradle 脚本配置出现问题了,可以对比下cocos2dx的模板工程配置。

看看是不是在gradle加入对应平台的设置 例如你上面说得 armeabi;arm-v8;armeabi-v7这三个。其实只要后面2个就好了。当然如果有PC模拟器支持 需要加入X86的库。同时看NDK版本是否正确。

感谢回答。
工程目录底下是有两个android工程,一个当中有app目录,一个没有(一个是Eclipse工程一个是android-studio工程?)。
发现其实有生成libgame.so(不是libcocos2dcpp.so),但是只在Eclipse工程下的libs/armeabi/目录里,文件并没有被输出到android-studio工程下的libs/armeabi/目录下,原项目命令行使用的是android-studio打包方式,打包出来的apk是在android-studio工程下的。
如果我手动把libgame.so复制到android-studio工程下的对应目录,再执行打包,就正常了。
问题是这样的话每次打包都得执行两次还得手动复制libgame.so。
请问这是什么原因?如何解决?非常感谢。

感谢回答。
发现其实有生成libgame.so,但是只在Eclipse工程下面输出,没有在android studio目录下输出,如果我手动复制过来再打包一次,就正常了。
请问如何解决?非常感谢

那可能就是你的配置不正确。
sourceSets.main {
java.srcDirs “…/src”, “src”
res.srcDirs “…/res”, ‘res’
jniLibs.srcDirs “…/libs”, ‘libs’
manifest.srcFile “AndroidManifest.xml”
assets.srcDir “{RES_PATH}/data" jniLibs { // Vulkan validation layer // srcDir "{android.ndkDirectory}/sources/third_party/vulkan/src/build-android/jniLibs”
}
}

最后最好用android-studio处理吧,不要用eclipse

问题找到了, 因为这个项目里 Android-studio工程的app目录下的jni和obj目录是用了符号链接指向eclipse目录下, 但是这个符号链接只支持FAT32, 跟当前文件系统不兼容, 导致符号链接失效.
之前编译的时候一开始的错误是./jni/下的.mk文件文件找不到, 当时的处理方式是直接设置NDK_PROJECT_PATH到eclipse目录下了. 错误虽然过掉了, 但是变成使用eclipse工程在编译, 导致输出so的目录不对.
非常感谢帮助, 提供了重要的思路.