GVKun编程网logo

Using NDK-STACK to Debug Cocos2dx Android Project

17

这篇文章主要围绕UsingNDK-STACKtoDebugCocos2dxAndroidProject展开,旨在为您提供一份详细的参考资料。我们将全面介绍UsingNDK-STACKtoDebugCo

这篇文章主要围绕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

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 随记> 关于cocos2dx接Android sdk的一些坑

关于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

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

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闪烁

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的分享就到这里,希望大家有所收获,若想了解更多关于 关于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闪烁等相关知识,可以在本站进行查询。

本文标签: