android 通过JNI调用C/C++代码(linux)
来源:互联网 发布:js时间段选择插件 编辑:程序博客网 时间:2024/05/29 17:29
1.先安装好jdk,ndk,进行准备
2.在eclipse下创建Android一个工程:Jnitest
JniTest.java
public class JniTest extends Activity {
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jni_test);
tv1 = (TextView) findViewById(R.id.textView1);
tv1.setText(welcome("呵呵"));
}
static {
System.loadLibrary("jnitest");
}
public native String welcome(String who);
}
3.编译该工程:使用project--clean--当前工程。生成相应的.class文件。
4.打开终端:cd 到当前项目,比如说我的是 cd workspace/Jnitest,然后执行javah -classpath bin/classes -d jni 包名.类名,我的是javah -classpath bin/classes -d jni com.example.jnitest.JniTest.执行成功后会在项目目录下生成一个jni文件夹,里面有相对应的.h文件,我的是com_example_jnitest_JniTest.h。
5.在jni文件下编写c++文件(或c文件)
com_example_jnitest_JniTest.cpp
#include "com_example_jnitest_JniTest.h"
#include <string.h>
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_example_jnitest_JniTest_welcome(JNIEnv *env,
jobject obj, jstring who) {
return env->NewStringUTF("Hello 旺旺 !");;
}
6.在jni文件下编写Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libjnitest
LOCAL_SRC_FILES := com_example_jnitest_JniTest.cpp
include $(BUILD_SHARED_LIBRARY)
7.在终端下cd到该工程目录下:cd workspace/Jnitest
执行:ndk-build
执行成功会出现
[armeabi] Compile++ thumb: jnitest <= com_example_jnitest_JniTest.cpp
[armeabi] SharedLibrary : libjnitest.so
[armeabi] Install : libjnitest.so => libs/armeabi/libjnitest.so
生成了 .so 文件,我们可以在 libs/armeabi/ 目录下找到该文件
执行不成功则会出现相应的错误,自己查找改错。
8.运行该工程则会在textView里面显示“Hello 旺旺 !”
注意:
1.如果你编写的是.c文件,那么则要做修改输出
jstringJava_com_example_jnitest_JniTest_welcome(JNIEnv *env,
jobject obj, jstring who) {
return (*env)->NewStringUTF(env, "hello,旺旺!");
}
这是c和c++文件的区别。
2.在ndk-build之后可能会出现:APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
这不影响我们的操作,如果想去掉它,则在Android,mk文件下添加:APP_PLATFORM := android-8就可以了。
3.编写c和c++文件的时候注意要和.h文件里面的函数名称相同。
GOOD LUCY!!!!!!!!
- android 通过JNI调用C/C++代码(linux)
- android中如何通过jni调用c,c++代码
- android通过jni调用C代码socket出错问题
- 通过JNI接口在Android中调用C/C++代码
- android通过jni调用C代码socket出错问题
- Android App中通过JNI调用C/C++代码
- Android App中通过JNI调用C/C++代码(二)
- Android C 通过JNI 调用JAVA
- Android JNI简单实例(android 调用C/C++代码)
- Android JNI简单实例(android 调用C/C++代码)
- Android JNI简单实例(android 调用C/C++代码)
- Android JNI简单实例(android 调用C/C++代码)
- 用Android Studio通过Java代码调用C代码的JNI流程
- Android底层调用C代码(JNI实现)
- Android Studio中通过jni实现对C/C++代码的调用,HelloJni,Ubuntu
- Java 通过JNI调用C或者CPP代码
- Java 通过JNI调用C或者CPP代码
- 使用Qt / C + +通过JNI调用Java代码
- 利用Aspose.Word控件实现Word文档的操作
- SpringMVC json问题 406 Not Acceptable
- ListView 跳转到Activity
- 给UIView添加背景图片
- ios应用间通信和分享数据的机制
- android 通过JNI调用C/C++代码(linux)
- andriod 和Unity 互相调用 以及 IOS与unity互相调用
- java小程序:闹钟(倒计时)
- app widget添加流程
- Linux 系统挂载数据盘
- Tiny6410自动挂载U盘、SD卡等设备的一点知识
- VC++的一个正则错误
- call和apply的第一个参数是null/undefined时函数内的的this指向window或global
- tolua总结(二)