我一直在努力开始在我的Android应用程序中添加本机代码,所以我查看了大量的Android NDK教程都无济于事。我无法在我的模拟器或Galaxy S3上运行任何应用程序。我一直得到同样的错误:"不幸的是,[AppName]已停止工作" 我的ndk-build命令成功运行,我得到一个.so文件。我不知道.so文件应该是什么样的。这是我的
对我来说这看起来很乱,但我知道什么?这是我的logcat
http://txt.do/klod
它说Native Method Not Found
我将以下代码作为我的主要(也是唯一的)活动
import android.app.Activity;
import android.os.Bundle;
public class NDKSetupActivity extends Activity {
static {
System.loadLibrary("ndksetup");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
printLog("Hello!!");
}
private native void printLog(String logThis);
}
这是我的C代码(称为native.c)
#include <jni.h>
#include <string.h>
#include <android/log.h>
#define DEBUG_TAG "NDKSetupActivity"
void com_example_ndksetup_NDKSetupActivity_printLog(JNIEnv *env, jobject this, jstring logString)
{
jboolean isCopy;
const char * szLogString = (*env)->GetStringUTFChars(env, logString, &isCopy);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK: %s", szLogString);
(*env)->ReleaseStringUTFChars(env, logString, szLogString);
}
这是我的Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := ndksetup
LOCAL_SRC_FILES := native.c
include $(BUILD_SHARED_LIBRARY)
这是我的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ndksetup"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".NDKSetupActivity"
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>
答案 0 :(得分:1)
您缺少 Java_
前缀。尝试将native.c
中的函数名称重命名为Java_com_example_ndksetup_NDKSetupActivity_printLog
。
希望这有帮助。
答案 1 :(得分:0)
对于正确的函数名称,有javah
:
cd bin/classes
javah com.company.MyClassWithNativeStuff com.company.Util
它生成.h文件。