NDK环境搭建及遇到问题

来源:互联网 发布:手游推荐 知乎 编辑:程序博客网 时间:2024/04/30 09:47

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;@Overrideprotected 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    := NdkDemoLOCAL_SRC_FILES := NdkDemo.cppinclude $(BUILD_SHARED_LIBRARY)

NdkDemo.cpp需要做如下修改

#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

0 0
原创粉丝点击