您的位置:首页 > 移动开发 > Android开发

Android学习之NDK环境的配置

2015-09-09 15:37 716 查看

前言:最近学习了一下Android里如何配置NDK的环境,因此写篇文章来积累一下学习到的东西!

一.首先要下载我们需要的C/C++工具包,即NDK工具包,大家可以到这个网址下载:http://www.androiddevtools.cn/ ,里面有很多开发工具,建议大家收藏!

1.我下载的NDK为android-ndk-r9d包,如下图所示:




注:此次我配置NDK环境是在windows下,使用Eclipse ADT开发工具来配置的,没用其它的系统和Android Studio工具来配置,请见谅。其它的工具包有的是exe格式的,我还没试过,大家可以尝试一下。

2.解压到我们的开发工具即ADT的目录底下,如下图所示:



二.在完成上面的步骤之后,接下里的步骤都是在Eclipse工具里进行的:

1.首先,打开我们的Eclipse(含有ADT插件的Android开发环境),打开工具栏底下的Window -> Preferences -> Android -> NDK,开始设置我们的NDK路径,设置完后,点击Apply,再点击OK,如下图所示:




2.接下我们新建一个Android项目,项目名为hellojni,并设置包名为com.android.hellojni:

(1).接着,我们选中hellojni项目,点击鼠标右键,弹出的菜单项里,选择Android Tools -> Add Android Native Support,然后给我们的.so文件取名,例如jni-test,这里我们选择默认,点击Finish就行,如下图所示:




(2).此时,项目底下就多出了一个jni的文件夹,jni文件夹下有Android.mk和hellojni.cpp文件。Android.mk是NDK工程的Makefile,hellojni.cpp就为NDK的源文件。此时项目已经创建成功,下面还需为我们这个项目导入到编译环境里去运行,然后开始我们的C语言文件的编写和Android里的Java代码的编写了,编写C语言代码途中有错误,编译器将会报错。

三.为我们上面第二步创建出来的项目导入到编译环境下运行:

在NDKr7开始,谷歌的windows版本NDK提供了一个ndk-build.cmd的脚本,这样就可以直接使用这个脚本编译,不需要cygwin了。

1.首先,选择我们的hellojni项目,点击鼠标右键,在弹出的菜单下选择Properties -> Builders -> New,即新添加一个编译器,点击之后出现添加界面,选择Program,点击OK,如下图所示:




2.出现了添加界面:

(1)首先我们给编译器设置名称,例如NDK_Builder,设置Location为NDK的安装目录下的ndk-build.cmd,设置Working Directory为${workspace_loc:/项目名称},如下图所示:




(2).再切换到Refresh选项卡,为Refresh resources upon completion打上勾,如下图所示:




(3).接着切换到Build Options选项卡,把后面三项复选框选中,打上勾,再点击旁边的Specify Resources…,选择你Android项目中的jni文件夹,点击Finish完成,如下图所示:




(4).上面3步设置完后,点击Apply应用,再点击OK确定即可。

(5).然后,就会在Builders的选项中多出一个NDK_Builder编译器,选中此编译器,点击Up按钮,把新建的编译器置顶,点击OK即可,如下图所示:




(6).然后控制台就会开始编译了,如下图所示:



四.虽然编译开始了并完成了,但是所编译的C语言代码我们还没写呢,所以,开始编写我们的Android项目的里的布局文件代和MainActivity以及C语言的代码,利用C代码和Java代码的结合,来显示一个Hello JNI!的文本内容:

(1).首先,打开Android项目底下的activity_main.xml布局文件,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView 
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>


(2).然后开始编写我们的C语言代码,打开jni文件夹下的hellojni.cpp文件,hellojni.cpp代码如下:

#include <string.h>
#include <jni.h>

extern "C"{
    jstring Java_com_android_hellojni_MainActivity_show(JNIEnv* env,jobject thiz)
    {
        jstring str=env->NewStringUTF("Hello JNI!");
        return str;
    }
}


说明:

第一,上面的第一二行代码为导入头文件,其中第二行代码为引入JNI(Java native Interface),需要什么库就导入什么头文件。

第二,其中的方法,必须放置在extern “C”{方法}中,因为所有的java代码要转换为C代码必须要这样,否则将会报如下图的错误:




第三,其中的jstring为Java字符串类型,其中的函数名为Java_com_android_hellojni_MainActivity_show,这个函数的构成为Java_<包名称><类名><函数>,其中该函数的名称和参数要与Android工程中的MainActivity.java文件定义的一致,否则会出错,其中Java的J必须大写,否则也会出错。

第四,最后两行的代码是为jstring类型赋值,并返回。

第五,因为我们在上面已经导入了编译环境,所以你一保存C代码,将会立即编译,如果C代码有错误,也会提示错误。

编译成功后如下图所示:




(3).最后,再编写我们的MainActivity.java文件,代码如下:

package com.android.hellojni;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView=(TextView)findViewById(R.id.textView);
        textView.setText(show());
    }

    public static native String show();
    static {
        System.loadLibrary("hellojni");
    }
}


说明:

第一,其中static{System.loadLibrary(“hellojni”);} 表示加载hellojni这个库,其中这个库的名称不能随便乱写,要根据Android.mk文件里的LOCAL_MODULE 的名称来写,否则会出错,如下图所示:




第二,其中的public static native String show();这个静态的方法是调用C代码中的那个show函数。

第三,通过调用show()函数,返回一个字符串,此时的字符串内容就为C程序里的Hello JNI!了。

五.然后部署此项目到Android模拟器上,效果如下:



六.以上内容仅供大家学习参考,写得不好,请见谅,如有错误,请指出,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: