【发布时间】:2015-03-18 06:06:48
【问题描述】:
我是 android JNI 的新手并尝试以下代码:
包名:com.example.jnitest
Java 类:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainActivity mainActivity = new MainActivity();
System.out.println("Sum of two variables : "+ sumOfTwovariable((int)mainActivity.multiply(10, 25), 10));
}
public native long sumOfTwovariable(int v1, int v2);
static {
System.loadLibrary("JNITest");
}
public native long multiply(int v1, int v2);
static{
System.loadLibrary("com_example_pdemo_MainActivity");
}
}
Android.mk 文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JNITest
LOCAL_SRC_FILES := JNITest.cpp
LOCAL_SHARED_LIBRARIES := Prebuild_com_example_pdemo_MainActivity
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includes
LOCAL_STATIC_LIBRARIES := Prebuild_com_example_pdemo_MainActivity
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := Prebuild_com_example_pdemo_MainActivity
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcom_example_pdemo_MainActivity.so
include $(PREBUILT_SHARED_LIBRARY)
我已将预构建的 com_example_pdemo_MainActivity.so 库放在 JNI-> armeabi(write multiple function) 文件夹中,包含在 Android.mk 文件中
JNI 内部:
使用以下命令创建头文件:javah -jni -classpath....
Header file created using javah : com_example_jnitest_MainActivity.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_jnitest_MainActivity */
#ifndef _Included_com_example_jnitest_MainActivity
#define _Included_com_example_jnitest_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_jnitest_MainActivity
* Method: sumOfTwovariable
* Signature: (II)J
*/
JNIEXPORT jlong JNICALL Java_com_example_jnitest_MainActivity_sumOfTwovariable(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
原生函数的定义:JNITest.cpp
#include "com_example_jnitest_MainActivity.h"
extern "C" {
long multiply(int val1,int val2);
}
JNIEXPORT jlong JNICALL Java_com_example_jnitest_MainActivity_sumOfTwovariable(
JNIEnv *env, jobject obj, jint val1, jint val2) {
int val=multiply(val1,val2);
return (val+val1);
}
当我编译它时,我得到了对“乘法”的未定义引用。让我知道我犯了什么错误。
提前致谢..
【问题讨论】:
-
您是否在本机代码中的任意位置定义了乘法?
-
是的,我有。我在 com_example_pdemo_MainActivity.so(exteranl .so 文件)中编写了多个函数定义。
-
@YogeshChander 你在哪里定义了乘法?
-
我已经在 com_example_pdemo_MainActivity.so(预建共享库文件)中编写了乘法函数定义。
-
请发布您的 com_example_pdemo 的本机代码
标签: java android c++ c android-ndk