我有一個java項目,現在我想添加一些NDK功能。Android-NDK編譯和鏈接
這裏是我的Android.mk
:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := android
LOCAL_CFLAGS := -Wno-psabi
LOCAL_SRC_FILES := android.c
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
這裏是我的android.c
#include <jni.h>
#include <string.h>
#include <android/log.h>
#define DEBUG_TAG "NDK_AndroidNDK1SampleActivity"
void Java_ru_tonybo_app_NativeRenderer_print(JNIEnv* env, jobject thiz, jstring message) {
jboolean isCopy;
const char * szMessage = (*env)->GetStringUTFChars(env, message, &isCopy);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", szMessage);
(*env)->ReleaseStringUTFChars(env, message, szMessage);
}
這裏是我相關的Java類
package ru.tonybo.app;
public class NativeRenderer {
public NativeRenderer (String message) {
print(message);
}
public native void print(String message);
static {
System.loadLibrary("android");
}
}
NDK編譯通過cygwin的是確定
[email protected] /cygdrive/d/javaProjects/App_JNI/jni
$ /cygdrive/d/android-ndk-r8b/ndk-build -B
Cygwin : Generating dependency file converter script
Compile thumb : android <= android.c
SharedLibrary : libandroid.so
Install : libandroid.so => libs/armeabi/libandroid.so
libandroid.so
被創建並放置在/libs/armeabi/libandroid.so
,但是當我在Eclipse啓動設備上的應用程序,我得到異常UnsatisfiedLinkError
對本地通話print(message);
我在這裏錯過或做錯了? 可能是我應該以某種方式告訴日食尋找共享庫,如果是的話如何做到這一點?
我跑你的代碼輸出來了,你,爲了JNI的onload消息也有。 –
這一切看起來不錯。 LogCat中有什麼有趣的東西?運行ARM-v7a/Intel/MIPS指令的設備是否有任何機會設置? –
我正在使用三星galaxy tab2 http://browser.primatelabs.com/geekbench2/1084290 –