编辑-2
终于修复了错误,请参阅下面的答案。
编辑-1
现在创建了一个新项目并将其导入 adt
并从 property->android->library 添加 src,
因为我添加了库它的编译,现在创建了 libcocos2dcpp.so 文件
并将其添加到 myapp.java 文件中
System.loadLibrary("cocos2dcpp");
运行它并将其安装在模拟器上,给出相同的错误
08-14 08:05:19.792: E/AndroidRuntime(1425): java.lang.UnsatisfiedLinkError: Native method not found: org.cocos2dx.lib.Cocos2dxHelper.nativeSetExternalAssetPath:(Ljava/lang/String;)V
08-14 08:05:19.792: E/AndroidRuntime(1425): at org.cocos2dx.lib.Cocos2dxHelper.nativeSetExternalAssetPath(Native Method)
我正在使用 cocos2d-2.0-x-2.0.3
NDK -- android-ndk-r9d
ANDROID SDK -- android-19 使用 MAC OS -- 版本 10.9.4
通过导入项目将我的项目添加到 adt。
编辑 build_native.sh 并添加
# paths
NDK_ROOT="/Users/YourMacName/Documents/android-ndk-r9d"
在文件的开头。
我的 Android.mk 文件是
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := game_shared
LOCAL_MODULE_FILENAME := libgame
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/GamePlayScene.cpp \
../../Classes/GameMenu.cpp \
../../Classes/AEHero.cpp \
../../Classes/Object.cpp \
../../Classes/AEGroundElement.cpp \
../../Classes/LevelGenerator.cpp \
../../Classes/AEAirElement.cpp \
../../Classes/AEGetShellEffect.cpp \
../../Classes/AEPowerUp.cpp \
../../Classes/EnemiesGamePlay.cpp \
../../Classes/EnemyObject.cpp \
../../Classes/AEGameManager.cpp \
../../Classes/AEStoreMenu.cpp \
../../Classes/AEMagnet.cpp \
../../Classes/AEGroundElementNew.cpp \
../../Classes/GameModeSelectionScreen.cpp \
../../Classes/HowToPlay.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions)
添加cocos2dx库属性->java构建路径->链接源->src
在 myApp.java 文件中添加此代码以加载 libgame.so 文件
static
{
try
{
System.loadLibrary("game");
}
catch (UnsatisfiedLinkError ule)
{
Log.e("JNI", "WARNING: Could not load libgame.so");
}
}
在清单文件中添加了此代码
<!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"
android:value="game" />
这是我的应用程序包的屏幕截图
它在 genymotion 模拟器和 android 设备错误消息弹出窗口上成功运行
Unfortunately, myApp has stoped.
LogCat 中的错误是
08-13 09:46:19.406: E/JNI(1320): WARNING: Could not load libgame.so
08-13 09:46:19.410: W/dalvikvm(1320): No implementation found for native Lorg/cocos2dx/lib/Cocos2dxHelper;.nativeSetApkPath:(Ljava/lang/String;)V
08-13 09:46:19.414: D/AndroidRuntime(1320): Shutting down VM
08-13 09:46:19.414: W/dalvikvm(1320): threadid=1: thread exiting with uncaught exception (group=0xa4b53648)
08-13 09:46:19.414: E/AndroidRuntime(1320): FATAL EXCEPTION: main
08-13 09:46:19.414: E/AndroidRuntime(1320): java.lang.UnsatisfiedLinkError: Native method not found: org.cocos2dx.lib.Cocos2dxHelper.nativeSetApkPath:(Ljava/lang/String;)V
08-13 09:46:19.414: E/AndroidRuntime(1320): at org.cocos2dx.lib.Cocos2dxHelper.nativeSetApkPath(Native Method)
08-13 09:46:19.414: E/AndroidRuntime(1320): at org.cocos2dx.lib.Cocos2dxHelper.init(Cocos2dxHelper.java:63)
08-13 09:46:19.414: E/AndroidRuntime(1320): at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:59)
08-13 09:46:19.414: E/AndroidRuntime(1320): at com.burninape.hobbitjetpackrunner.hobbit.onCreate(hobbit.java:106)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.app.Activity.performCreate(Activity.java:5133)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.os.Looper.loop(Looper.java:137)
08-13 09:46:19.414: E/AndroidRuntime(1320): at android.app.ActivityThread.main(ActivityThread.java:5103)
08-13 09:46:19.414: E/AndroidRuntime(1320): at java.lang.reflect.Method.invokeNative(Native Method)
08-13 09:46:19.414: E/AndroidRuntime(1320): at java.lang.reflect.Method.invoke(Method.java:525)
08-13 09:46:19.414: E/AndroidRuntime(1320): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-13 09:46:19.414: E/AndroidRuntime(1320): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-13 09:46:19.414: E/AndroidRuntime(1320): at dalvik.system.NativeStart.main(Native Method)
我的问题是 libgame.so 文件是如何生成的?
libs
我的文件夹中没有生成名为 libgame.so 的文件
它在 iOS 中运行良好。
我曾尝试在 cocos2dx 2.2.2 中创建新应用程序,它的工作完美,但我的应用程序在 cocos2d-2.0-x-2.0.3 中,我无法将整个代码转换为 cocos2dx 2.2.2,因为它太长了。
贴了很多赞,但没有给出解决方案,我尝试了很多,如果我得到了解决方案,我肯定会发布解决方案。
提前致谢。