我試圖運行CPP一個簡單的Android NDK的應用程序,但我得到的生成()函數UnsatisfiedLink錯誤。UnsatisfiedLinkError在Android應用(NDK)原生CPP功能
任何幫助,將不勝感激。我在C++上很流利,但是我的java有點生疏。我一直在嘗試從網絡上獲取關於命名的很多提示,但到目前爲止還沒有運氣。下面是我的文件:
native.cpp:
#include <string.h>
#include <jni.h>
jstring Java_com_optimuse_app_OptimuseAppActivity_generate(JNIEnv* env, jobject thiz){
return env->NewStringUTF("Hello from JNI !");
}
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native
LOCAL_SRC_FILES := native.cpp
include $(BUILD_SHARED_LIBRARY)
我NDK建造編譯這一點,一切順利的話,它爲我提供了一個libnative。所以,它位於項目目錄中。其餘的我用日食。
OptimuseAppActivity.java:
package com.optimuse.app;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class OptimuseAppActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(generate());
setContentView(tv);
}
public native String generate();
static {
System.loadLibrary("native");
}
}
而自動生成的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.optimuse.app"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:hasCode="true">
<activity
android:name="com.optimuse.app.OptimuseAppActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
感謝您的任何建議,現在一直在尋找了幾個小時!
只是一些額外的調試,我已經嘗試:沒有generate()函數,應用程序工作正常。如果我將LoadLibrary文件更改爲另一個名稱,則會出現錯誤,所以我猜他加載的庫很好。我猜我的地方做了一個包/班/命名誤差作爲我不習慣去渣......已經彎曲我的頭了吧... – dorien
您是否嘗試過把的System.loadLibrary類聲明的頂部? – Force
看起來你可能在jni C api和C++ api之間存在差異。也許回過頭來看看hello-jni C示例,測試它,然後只做一個自定義包名或轉換爲C++的代碼,然後只執行一次。 –