Android Studio ——NDK

本文适合完全没有ndk开发经验的人阅读

开发环境android studio

1下载ndk 解压在as中配置ndk的路径

点击下载ndk

下载后解压

这里写图片描述

如上图配置后,会在local.properties文件下生成路径,说明配置生效

这里写图片描述

2新建jni类

jni类中声明用到的native方法

public class JNI {

    //获取字符串
    public native String getString();


}

3新建activity

我们这里就是要实现界面上通过jni显示底层c返回的字符串

public class AndroidNDKDemoActivity extends Activity {
    //使用静态代码块加载类库
    static{
        System.loadLibrary("first_jni");//一定要注意名称没有“lib"
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn1 = (Button)findViewById(R.id.show_btn);

        //定义本地类
        final JNI jni = new JNI();
        btn1.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                //显示从C代码中返回的字符串
                Toast.makeText(getApplicationContext(), jni.getString(),Toast.LENGTH_LONG).show();
            }});

    }
}

4使用javah命令生成.h文件

这里使用android studio的Terminal命令行。之前参考的文章多数要求需要安装cygwin我也安装了,但是费了九牛二虎之力也没有最后成功。android studio的强大之处就是比eclipse内置了更多的功能。当然这里使用的还是低版本的android studio 后面的文章会介绍新版as对于ndk开发提供的强大功能,这里就是先体验一下ndk而已。
这里写图片描述

这里写图片描述

此处编码报错不影响,实际.h已经生成如图 具体javah命令介绍如下。

这里写图片描述


这样会在main下面生成jni包我们通过javah生成的文件也会在下面

这里要说一下,你要保证你jdk环境配置可行,否则可能调用不到javah命令)

5jni包下新建c文件

jni的编写规范暂时先不管,只是方法返回了“hello NDK”

#include"jni.h"

/*
 * Class:     com_ndk_demo_JNI
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_litao_myndk_JNI_getString(JNIEnv* env, jobject obj)
{
    //返回一个字符串
    return (*env)->NewStringUTF(env,"Hello NDK!");
}

6新建Android.mk文件

大家都知道在Linux下编辑经常要写一个Makefile文件, 可以把这个Makefile文件理解成一个编译配置文件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。而在Android下的Android.mk文件也是类型的功能,顾名思义,从名字上就可以猜测得到,Android.mk文件是针对Android的Makefile文件.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := first_jni 
LOCAL_SRC_FILES := NDKDemo.c 
include $(BUILD_SHARED_LIBRARY)
我们来解释一下这几行代码:因为这里是第一个ndk例子所以太复杂的解释没必要先说这里用到的。好了不多说,上面文件中我们目前注意两行就可以了LOCAL_MODULE    := first_jni 指定了module名字;LOCAL_SRC_FILES := NDKDemo.c 指定了我们编写的.c文件。



7配置build.gradle

这里写图片描述

不同的处理器架构使用的so库是有差别的。在android studio中的build.gradle可以配置生成的so库类别。
这里指出eclipse中可能需要使用Application.mk文件来实现这里的功能。as没必要了。这里指定生成三种。

8编译出so库

在如图所示目录下可以看出生成了三种
这里写图片描述

9复制so库到lib并改名为jniLibs

as默认去jniLibs寻找,所以需要新建并把生成的so复制进来。在新版本的android studio中并不是这样的。后面的文章再讨论。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值