Java 未找到NDK本机类错误
我一直在试图弄清楚为什么会出现一个错误,说明找不到该方法,但似乎一切正常(至少是导致该错误的原因) 我的Android类:Java 未找到NDK本机类错误,java,android,eclipse,android-ndk,unsatisfiedlinkerror,Java,Android,Eclipse,Android Ndk,Unsatisfiedlinkerror,我一直在试图弄清楚为什么会出现一个错误,说明找不到该方法,但似乎一切正常(至少是导致该错误的原因) 我的Android类: package com.liamw.root.androididchanger; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; pu
package com.liamw.root.androididchanger;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class DebugUserActivity extends Activity {
Button button;
TextView logcat;
static {
System.loadLibrary("sqlite");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.debug);
button = (Button) findViewById(R.id.button1);
logcat = (TextView) findViewById(R.id.textView1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
runSQL("example.sqlite3", "SELECT Value FROM MyTable");
}
});
/*try {
Runtime.getRuntime().exec("logcat -c").waitFor();
Process process = Runtime.getRuntime().exec("logcat -v long *:*");
BufferedReader reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
while (true) {
String nextLine = reader.readLine();
logcat.setText(logcat.getText().toString() + "\n" + nextLine);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}*/
}
public native void runSQL(String path, String query);
}
本机文件(idchanger.c):
对我来说,一切似乎都井然有序,但错在哪里呢
编辑:
Android.mk:
LOCAL_PATH := $(call my-dir)
$(LOCAL_PATH)/../sqlite3.c:
$(MAKE) -C $(@:%/sqlite3.c=%) sqlite3.c
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog -landroid
LOCAL_MODULE := sqlite
LOCAL_SRC_FILES := ../sqlite3.c idchanger.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_CFLAGS := -DSQLITE_THREADSAFE=1
include $(BUILD_STATIC_LIBRARY)
编辑2:
啊哈!这将添加到日志中:
09-09 19:59:28.605: D/dalvikvm(9696): No JNI_OnLoad found in /system/lib/libsqlite.so 0x40e46360, skipping init
编辑3:我刚刚注意到,在我制作的一个测试应用程序中,logcat中有一些行表示它试图加载库,然后是ndk库文件
我在这里看不到这些行…我认为问题在于libsqlite.so已经存在于system/lib中,它的优先级高于您在项目lib文件夹中构建的libsqlite.so。因此,当您调用
System.loadLibrary(“sqlite”)代码>,将加载系统/lib/libsqlite.so。您可以重命名您的库,如“mysqlite”,然后再试一次。add
android.useDeprecatedNdk=true
在gradle.properties
中继续使用当前的NDK集成。查找logcat中加载本机库成功(或失败)的部分。还要确保您的本机库是最新的,而不是昨天的旧版本,这很容易发生。@ChrisStratton我删除了整个obj文件夹(或包含该版本的任何文件夹)。在此之前似乎没有消息,但我明天会仔细查看。如果没有消息,则它甚至不会尝试加载您的库。假设您直接从代码中复制粘贴,DebugUserActivity类的第32行是否有问题?我的意思是,关闭parantesis和分号.并不是导致异常的原因,但似乎您已经将路径和查询参数从Java反转到了C
09-09 19:59:28.605: D/dalvikvm(9696): No JNI_OnLoad found in /system/lib/libsqlite.so 0x40e46360, skipping init
android.useDeprecatedNdk=true