ant*_*mea 4 c++ mobile android
我有一个小类的C++库项目.
class Test
{
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
}
Run Code Online (Sandbox Code Playgroud)
我可以通过Android NDK构建这个类.(问题1).我可以将.so文件用于Java应用程序.我如何从Java代码调用SomeFunc方法(问题2).
以下是步骤:
1.)在项目的"jni"文件夹中创建Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main_jni
LOCAL_CFLAGS :=
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS :=
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
2.)在"jni"文件夹中创建main.cpp:
#include <jni.h>
using namespace std;
#ifdef __cplusplus
extern "C" {
#endif
class Test {
public:
Test(){};
~Test(){};
int SomeFunc() { return 5; }
};
jint Java_com_example_activity_MainActivity_SomeFunc(JNIEnv *env, jobject thiz)
{
Test *test = new Test();
return test->SomeFunc();
}
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
3.)添加一个调用来加载调用活动中的库(本例中为MainActivity.java):
static {
System.loadLibrary("main_jni");
}
Run Code Online (Sandbox Code Playgroud)
4.)在调用活动中定义本机函数:
native int SomeFunc();
Run Code Online (Sandbox Code Playgroud)
5.)从活动中调用它:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView text = (TextView) this.findViewById(R.id.text);
text.setText(String.valueOf(SomeFunc()));
}
Run Code Online (Sandbox Code Playgroud)
6.)从项目的根文件夹运行"ndk-build"命令(注意:在此步骤之后刷新Eclipse中的项目)
7.)重新构建并运行应用程序
| 归档时间: |
|
| 查看次数: |
7568 次 |
| 最近记录: |