我正在使用Eclipse來實驗Android NDK編程。我的平臺信息如下:Android ndk-build不會在/ lib中生成共享庫
- Windows 7的
- Eclipse平臺。我可以使用這個eclipse平臺來構建android應用程序而不用麻煩;沒有問題。
- Cygwin安裝了開發包。 「make」的版本是GNU Make 3.81。
我編寫非常簡單本地C功能以及所示Android.mk如下:
----------- ../JNI/get_string_native.c --- ------
#include <jni.h>
#include <string.h>
#include <android/log.h>
#include <stdio.h>
jstring Java_geil_learn_ndk_NDKStringActivity_getString(JNIEnv * env, jobject this, jint value1, jint value2)
{
char *szFormat = "The sum of the two numbers is: %i";
char *szResult;
// add the two values
jlong sum = value1+value2;
// malloc room for the resulting string
szResult = malloc(sizeof(szFormat) + 20);
// standard sprintf
sprintf(szResult, szFormat, sum);
// get an object string
jstring result = (*env)->NewStringUTF(env, szResult);
// cleanup
free(szResult);
return result;
}
--------------/JNI/Android.make ----------
# LOCAL_PATH := $(call my-dir)
#
# include $(CLEAR_VARS)
#
# LOCAL_LDLIBS := -llog
#
# LOCAL_MODULE := get_string_native
# LOCAL_SRC_FILES := get_string_native.c
#
# include $(BUILD_SHARED_LIBRARY)
現在我試着t o使用ndk-build生成共享庫,但沒有任何結果。即使沒有錯誤信息出現。請看下圖:
-------從Cygwin的終端---------
[email protected] /cygdrive/d/eclipse_projects/workspace/NDKString/jni
$ ndk-build
[email protected] /cygdrive/d/eclipse_projects/workspace/NDKString/jni
$
當然,我已經設置了環境變量PATH和\ JNI構建它。
我現在很困惑;請幫幫我!!
我已經刪除Android.make文件中的#號。現在它可以在/ lib中生成相應的.so文件。但是當我在一個活動中調用本地方法時,發生運行時錯誤。 Logcat信息如下。你能幫我嗎?
Trying to load lib /data/data/geil.learn.ndk.NDKStringAcivity/lib/libnative.so 0x405151f0
Added shared lib /data/data/geil.learn.ndk.NDKStringAcivity/lib/libnative.so 0x405151f0
No JNI_OnLoad found in /data/data/geil.learn.ndk.NDKStringAcivity/lib/libnative.so 0x405151f0, skipping init
60): Displayed geil.learn.ndk.NDKStringAcivity/.NDKStringActivity: +1s145ms
No implementation found for native Lgeil/learn/ndk/NDKStringAcivity/NDKStringActivity;.getString (II)Ljava/lang/String;
344): Shutting down VM threadid=1: thread exiting with uncaught exception (group=0x40015560)
344): FATAL EXCEPTION: main
344): java.lang.UnsatisfiedLinkError: getString
344): at geil.learn.ndk.NDKStringAcivity.NDKStringActivity.getString(Native Method)
344): at geil.learn.ndk.NDKStringAcivity.NDKStringActivity.onClick(NDKStringActivity.java:40)
344): at android.view.View.performClick(View.java:2485)
344): at android.view.View$PerformClick.run(View.java:9080)
344): at android.os.Handler.handleCallback(Handler.java:587)
344): at android.os.Handler.dispatchMessage(Handler.java:92)
344): at android.os.Looper.loop(Looper.java:123)
344): at android.app.ActivityThread.main(ActivityThread.java:3683)
344): at java.lang.reflect.Method.invokeNative(Native Method)
344): at java.lang.reflect.Method.invoke(Method.java:507)
344): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
344): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
344): at dalvik.system.NativeStart.main(Native Method)
60): Force finishing activity geil.learn.ndk.NDKStringAcivity/.NDKStringActivity
60): Activity pause timeout for HistoryRecord{407868c8) geil.learn.ndk.NDKStringAcivity/.NDKStringActivity} Sending signal. PID: 344 SIG: 9
60): Process geil.learn.ndk.NDKStringAcivity (pid 344) has died.
60): WIN DEATH: Window{4073a7c0 geil.learn.ndk.NDKStringAcivity/geil.learn.ndk.NDKStringAcivity.NDKStringActivity paused=false}
(60): Got RemoteException sending setActive(false) notification to pid 344 uid 10037
60): Activity destroy timeout for HistoryRecord{407868c8 geil.learn.ndk.NDKStringAcivity/.NDKStringActivity}
嘗試重命名Android.make到的Android.mk – Salw