这篇文章主要围绕UsingNDK-STACKtoDebugCocos2dxAndroidProject展开,旨在为您提供一份详细的参考资料。我们将全面介绍UsingNDK-STACKtoDebugCo
这篇文章主要围绕Using NDK-STACK to Debug Cocos2dx Android Project展开,旨在为您提供一份详细的参考资料。我们将全面介绍Using NDK-STACK to Debug Cocos2dx Android Project,同时也会为您带来
- Using NDK-STACK to Debug Cocos2dx Android Project
关于cocos2dx接Android sdk的一些坑 - android studio 编译 cocos2dx C++ 遇到 Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
- Android 首次安装版本匹配问题 出现错误:Install Repository and sync project Show in Project Structure dialog
- android-Cocos2dxActivity闪烁
Using NDK-STACK to Debug Cocos2dx Android Project
‘ndk-stack’ is a simple tool that allows you to analyze stack traces as they appear in the output of ‘adb logcat’ and replace any address inside a shared library with the corresponding:values.
In the output of ‘adb logcat’,you may see something like the followings,and we must translate those:
I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG ( 31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' I/DEBUG ( 31): pid: 351,tid: 351 %gt;%gt;%gt; /data/local/ndk-tests/crasher I/DEBUG ( 31): signal 11 (SIGSEGV),fault addr 0d9f00d8 I/DEBUG ( 31): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8 I/DEBUG ( 31): r4 00000004 r5 0000a008 r6 0000af88 r7 00013c44 I/DEBUG ( 31): r8 00000000 r9 00000000 10 00000000 fp 00000000 I/DEBUG ( 31): ip 0000959c sp be956cc8 lr 00008403 pc 0000841e cpsr 60000030 I/DEBUG ( 31): #00 pc 0000841e /data/local/ndk-tests/crasher I/DEBUG ( 31): #01 pc 000083fe /data/local/ndk-tests/crasher I/DEBUG ( 31): #02 pc 000083f6 /data/local/ndk-tests/crasher I/DEBUG ( 31): #03 pc 000191ac /system/lib/libc.so I/DEBUG ( 31): #04 pc 000083ea /data/local/ndk-tests/crasher I/DEBUG ( 31): #05 pc 00008458 /data/local/ndk-tests/crasher I/DEBUG ( 31): #06 pc 0000d362 /system/lib/libc.so I/DEBUG ( 31):
How to use this tool
If you succeed in building Cocos2d-x android project,it will generate shared libraries in $PROJECT_PATH/obj/local/abi,where ‘abi’ stands for your device’s ABI (i.e.’armeabi’ by default);
You can Feed the logcat text either as direct input to the program,e.g.:
adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi
Or you can use the -dump option to specify the logcat as an input file,e.g.:
adb logcat > /tmp/foo.txt $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt
After that,you will get the more readable output:
********** Crash dump: ********** Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' pid: 351,tid: 351 /data/local/ndk-tests/crasher signal 11 (SIGSEGV),fault addr 0d9f00d8 Stack frame #00 pc 0000841e /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13 Stack frame #01 pc 000083fe /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5 Stack frame #02 pc 000083f6 /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9 Stack frame #03 pc 000191ac /system/lib/libc.so Stack frame #04 pc 000083ea /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14 Stack frame #05 pc 00008458 /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19 Stack frame #06 pc 0000d362 /system/lib/libc.so
IMPORTANT
The tool looks for the initial line containing starts in the logcat output,i.e.something this looks like:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
When copy/pasting traces,don’t forget this line from the traces,or ndk-stack won’t work correctly.
Now both the versions(linux/windows/mac) of ndk-stack are available at Android Developer .
References
$NDK_ROOT/docs/NDK-STACK.html
关于cocos2dx接Android sdk的一些坑
简单说说UI线程 :在Android中,有个非常重要的家伙非常霸道,那就是UI线程。这霸道之一:不能被阻塞。 之二:系统对每一个组件的调用都从UI线程分发出去。
简单说说openGL线程:但凡cocos2dx 启动的绘制线程都是openGL线程。就这么多
任何SDK界面的调用,必须从UI线程中调用,所以需要放到主线程中。如果我们直接从GL线程中调用,轻则调用不了,重者程序蹦死。
解决办法:
得到主线程的handler,这里简单说一种,就是在onCreate中new一个静态handler。
或者new Handler(Looper.getMainLooper()),且叫mainHandler吧,
启动一个线程,
Thread sendThread=new Thread(new Runnable(){ public void run() { mainHandler.post(sendRun); } });
public Runnable sendRun=new Runnable() { @Override public void run() { // //这里就可以调用sdk里面的东西了
} };
</pre><pre name="code"><span>如何从UI线程中调用OpenGL线程呢,直接调用,我以前也干过,感觉没什么问题被发现(he he),如果发现了问题我觉得还是这么调用的好</span>
</pre><pre name="code">Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable() { public void run() { <span> </span>//回调什么马的 } });至于想知道,jni native什么的 还请出门右拐,不送
android studio 编译 cocos2dx C++ 遇到 Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
Error:Android Source Generator: Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
java.util.MissingResourceException: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:773)
at org.jetbrains.jps.android.AndroidJpsBundle.getBundle(AndroidJpsBundle.java:22)
at org.jetbrains.jps.android.AndroidJpsBundle.message(AndroidJpsBundle.java:32)
at org.jetbrains.jps.android.AndroidSourceGeneratingBuilder.runAidlCompiler(AndroidSourceGeneratingBuilder.java:688)
at org.jetbrains.jps.android.AndroidSourceGeneratingBuilder.doBuild(AndroidSourceGeneratingBuilder.java:198)
at org.jetbrains.jps.android.AndroidSourceGeneratingBuilder.build(AndroidSourceGeneratingBuilder.java:114)
at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1263)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:940)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1012)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:903)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:736)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:384)
at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:192)
at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:138)
at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:295)
at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:125)
at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:236)
at org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Android 首次安装版本匹配问题 出现错误:Install Repository and sync project Show in Project Structure dialog
1、进入Tools->Android->SDK Manager
2、进入Updates,观察Android SDK Tools。我的是26.1.1版本的,所以我SDK版本要选择比26版本小的,高版本兼容低版本。
3、进入Android SDK 查看SDK版本。我这里选的是24版本的,比26小。之前我SDK是29版本,故一直报错。把不需要的版本好前的“√”去掉,需要的版本前打“√”,点击ok。会自行卸载不要的版本,安装新的SDK。
4、在我们的SDK版本选好之后,关闭窗口,回到主界面。找到Gradle Scripts并打开,此目录用于存放项目创建的相关文件。找到build.gradle(Module:app)并打开。把有24的地方改成和你的版本好一致即可,如下图,。改好后点击上面的这个图标,保存更改。
5、最后回到MainActivity.java,运行程序看是否还报错。如继续报错,则点击
Install Repository and sync project根据提示进行下去。若还有什么问题,欢迎评论。
android-Cocos2dxActivity闪烁
当我启动Cocos2dxActivity并显示一段时间内的另一项活动(第三方sdk活动或自定义活动)时,cocos2dxActivity开始闪烁.当其他活动似乎完成时,cocos2dxActivity将恢复正常.
public class MyActivity extends Cocos2dxActivity {
public static void showSDKLogin() {
sdkMgr.showLogin();
}
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
static {
System.loadLibrary("game");
}
}
在sdkMgr.showLogin()函数中,它启动一个新活动以显示一些对话框.我在cocos2dx C代码中用jni称呼它.
如何解决闪烁的问题?
ps:对不起,我英语不好.我希望你们知道我的意思;)
解决方法:
关于Android上的闪烁,这是解决方案-https://github.com/cocos2d/cocos2d-x/pull/5320
您应该更新文件“ Cocos2dxGLSurfaceView.java”,然后更新“ onPause”和“ onResume”
@Override
public void onResume() {
super.onResume();
this.setRenderMode(RENDERMODE_CONTINUOUSLY);
this.queueEvent(new Runnable() {
@Override
public void run() {
Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnResume();
}
});
}
@Override
public void onPause() {
this.queueEvent(new Runnable() {
@Override
public void run() {
Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnPause();
}
});
this.setRenderMode(RENDERMODE_WHEN_DIRTY);
// super.onPause();
}
干杯.
今天关于Using NDK-STACK to Debug Cocos2dx Android Project的分享就到这里,希望大家有所收获,若想了解更多关于
本文标签: