我试图让NDK调试器工作但到目前为止没有成功.
为了确保我的调试符号存在且有效,我使用编译器选项-O0和-g,以及ndk-build参数NDK_DEBUG = 1.
ndk-gdb脚本运行时没有问题并启动GDB.什么时候执行"sharedlibrary"命令,我得到这个:
Symbols already loaded for /bla/bla/libMySharedLib.so
Run Code Online (Sandbox Code Playgroud)
但是当我尝试断开执行或者例如添加一个段错误来测试时,我从来没有从调用堆栈中的那个库中获得任何符号.我得到的唯一符号来自libc,如果我在等待互斥锁的情况下中断执行.还尝试添加断点,没有运气.GDB允许我添加断点,代码运行正常,但断点永远不会被触发.
我正在使用API级别8,因为我需要支持Android 2.2(Froyo).
伙计们,
我正在开发一个Android应用程序,我需要第三方.so库.我根据他们的指示构建了这个第三方库(使用ndk-build),然后将其包含在我的Android项目中.
因此,我按照docs/PREBUILTS.html中描述的步骤操作,并在jni/prebuilt目录中成功构建新的.so.现在我尝试在一个简单的测试Android应用程序中使用它来利用.so工具.所以我做的是:
static {
Log.i("load so > ","load so");
System.loadLibrary("xyz");
}
/* The native functions */
private static native int openFile(String filename);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
String path = getPathForDownloadDirectoryFile();
Log.i("file path> ", path);
int num= openFile(path);
}catch(Exception e){
Log.e(">", "could not open the file");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行我的应用程序时,我收到一条调试消息:在/data/data/com.example.myfirstapp/lib/xyz.so 0x411e6738中找不到JNI_OnLoad,跳过init然后应用程序关闭.
有关详细信息,请参阅以下错误日志:
No JNI_OnLoad found in /data/data/com.example.mysecondapp/lib/xyz.so 0x411e67a0, skipping init
W/dalvikvm( 570): No implementation found for native Lcom/example/mysecondapp/MainActivity;.openFile:(Ljava/lang/String;)I
D/AndroidRuntime( 570): Shutting down VM
W/dalvikvm( 570): threadid=1: thread …Run Code Online (Sandbox Code Playgroud) 我在过去一天左右收到这条消息,直到现在它还没有引起问题.我让我的代码早先与我的本机库一起运行,但今天我添加了一些新功能,但它再次无效.
LogCat中没有显示错误,但我的程序只是在我的设备上立即打开和关闭.没有消息说应用程序意外停止,只是屏幕上出现黑色闪烁.
我已经浏览了谷歌和搜索引擎优化,但这个消息有很多不同的原因.这是我的LogCat:
08-03 10:44:50.186: D/dalvikvm(2143): Trying to load lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): Added shared lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): No JNI_OnLoad found in /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58, skipping init
08-03 10:44:50.288: I/DEBUG(1058): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-03 10:44:50.288: I/DEBUG(1058): Build fingerprint: 'LENOVO/IdeaPad_Tablet_A1_07/A1_07:2.3.4/GRJ22/eng.user.20120209.100319:user/release-keys'
Run Code Online (Sandbox Code Playgroud)
我想知道的是:
1)此No JNI_OnLoad消息是否导致我的程序无法打开?
2)如果是这样,我知道我没有发布任何代码,但有人可以解释这条消息的一般概念.包括init它是什么跳过.
编辑:
我今天添加的新功能在发生这种情况时被注释掉了.我最初得到了一个不同的错误,并希望确保我的旧代码仍然有效.