标签:andriod ndk
1.具体搭建过程可参照http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html
2.测试工程,新建andriod工程。
修改 MainActivity
具体如下
public class MainActivity extends Activity { //调用本地c++代码,返回一个字符串,更新到textView中 public native String stringTestNdk(); static { try { System.loadLibrary("NdkDemo");//加载成功 System.out.println("hello NDK"); } catch (UnsatisfiedLinkError ule) {//如果加载错误 System.err.println("WARNING: Could not load library testndk!"); } } private TextView textView=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView=(TextView) this.findViewById(R.id.tv); //调用 textView.setText(stringTestNdk()); } }在工程文件上右键->Andriod tools->Add Native Support添加需要生成的so,本文由于上面已经写了,NdkDemo
生成JNI文件夹含有NdkDemo.cpp和Andriod.mk(makefile文件)
Andriod.mk需要做如下修改
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) //这个名称要一致 LOCAL_MODULE := NdkDemo LOCAL_SRC_FILES := NdkDemo.cpp include $(BUILD_SHARED_LIBRARY)
#include <jni.h> #include<string.h> //com.example.ndkdemo.MainActivity; // public native String stringTestNdk (); #include <android/log.h> extern "C" { JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_MainActivity_stringTestNdk(JNIEnv *env, jobject thiz); }; JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_MainActivity_stringTestNdk(JNIEnv *env, jobject thiz) { return env->NewStringUTF("Hello test NDK !"); }注意c++中调用c函数,要添加extern "c"
3 下面是需要提前配置的东东。
windows-》Preferences->>
(1). Andriod 下面的NDK路径配置下(定位到安装路径)
(2).c++ Build下的Environment的New 新建一个环境变量 NDKRoot 值为ndk路径
(3) 工程右键,点Properties->C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd
以上基本配置
其余配置可参见http://www.cnblogs.com/yejiurui/p/3476565.html
4 运行
(1)先生成 libNdkDemo.so库
在cmd命令行下,到本工程的目录。
输入 ndk-build回车
刷新工程,就可以看到libs/armeabi有库文件生成。
(2)运行andriod程序即可
问题:
1. 本文采用的模拟器为Genymotion报错信息如下
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
解决方案:点击下载Genymotion-ARM-Translation.zip
将你的虚拟器运行起来,将下载好的zip包用鼠标拖到虚拟机窗口中,出现确认对跨框点OK就行。然后重启你的虚拟机。
2.No implementation found for native L 。。。。Ljava/lang/String;
java.lang.UnsatisfiedLinkError: 。。。。解决方案:
如上代码中添加声明
extern "C" {
JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_MainActivity_stringTestNdk(JNIEnv *env, jobject thiz);
};
其余错误可参见http://blog.csdn.net/houshunwei/article/details/17217695
标签:andriod ndk
原文地址:http://blog.csdn.net/nothingl3/article/details/45670407