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)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值