JNI调试

来源:互联网 发布:星星知多少钻石大陆 编辑:程序博客网 时间:2024/05/21 02:49

    在Android下使用JNI调用自己实现的so共享库,通过网络链接访问无服务,程序刚启动时就崩溃了,没有任何的提示信息,adb logcat查看运行日志信息:

05-20 21:14:10.288  1382  1520 I ActivityManager: Process com.galen.snappy (pid 6476) has died.
05-20 21:14:10.288  1382  1387 I WindowManager: WIN DEATH: Window{45d9ecb0 com.galen.snappy/com.galen.snappy.Snappy paused=false}
05-20 21:14:10.311  1236  1236 D Zygote  : Process 6476 exited cleanly (1)
05-20 21:14:10.311  1382  1520 I UsageStats: Unexpected resume of org.adwfreak.launcher while already resumed in com.galen.snappy
05-20 21:14:10.389  1382  1382 W InputManagerService: Got RemoteException sending setActive(false) notification to pid 6476 uid 10095

找不到错误原因,使用ndk-gdb进行调试,提示没有提示符号表。

在AndroidManifest.xml中配置调试项:

android:debuggable="true"

在Android.mk中添加编译选项:-g

在ndk中屏蔽对编译符号信息过滤的脚本:

         android-ndk-r5b/build/core/build-binary.mk:#$(hide) $(call cmd-strip, $(PRIVATE_DST))

编译脚本如下:

#!/bin/sh
android update project -p ./
cd jni
ndk-build
cd ..
ant debug
adb uninstall com.galen.snappy
echo uninstall
cd bin
adb install Snappy-debug.apk
echo install


生成可供调试的带有符号表的debug版本。

ndk-gdb进行调试,并开启debug_log最终定位到出错位置,错误信息如下:

05-20 22:27:18.116  7272  7280 E ----android----: connection failed, trying with TLS port
05-20 22:27:18.116  7272  7280 E ----android----: Connect error
05-20 22:27:18.116  7272  7280 E ----android----: Coroutine exit

调试,打印错误信息,最终找到错误原因:

Permission denied

原来是没有网络操作权限啊,墨迹了这么久终于找到。

OK,添加权限在AndroidManifest.xml中:

<uses-permission android:name="android.permission.INTERNET"/>

adb logcat查看debug信息,终于调试通过。

小小错误费如此大功夫,还是对android了解太少。

~End~


原创粉丝点击