• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android Studio下NDK的使用

Android Studio下NDK的使用

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了androidstudio使用ndk,androidstudio配置ndk,android studio ndk,androidstudio安装ndk,studio配置ndk等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android Studio下NDK的使用


当我们在开发android程序的过程中,有时候需要应用程序对底层硬件的调用。android官方给我们提供NDK以便于我们在我们的程序中调用C,C++库。
Ndk是基于JAVA JNI技术所开发的一套应用于android编程的一系列工具集合,她可以帮助我们快速开发C或者C++的动态库并和应用一起打包生成APK。

关于JNI的原理,请参考 [ JAVA基础之理解JNI原理]


NDK的下载与安装

前往前往http://developer.android.com/ndk/downloads/index.html。

或者国内诸多镜像网站

下载完成后直接解压后即可使用


NDK的在Android Studio中的使用

1、新建一个Android Studio工程
创建一个android studio工程

2、配置工程中NDK的路径
file->project structure
这里写图片描述

点击确定后,你的local.prZ喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcGVydGllc87EvP7PwsPmtuDBy9K70NBuZGu1xMK3vrY8L3A+DQo8cD48aW1nIGFsdD0="这里写图片描述" src="http://www.bkjia.com/uploads/allimg/160412/0411155916-2.png" title="\" />

3、新建一个NDKTest类并编写如下代码
这里写图片描述

public class NDKTest {
    static {
        System.loadLibrary("ndk_test");
    }

    public native static String hello();
}

4、rebuild一下项目后,将工程求换到project目录
这里写图片描述

bebug目录下面已经生成了刚才编写的NDKTest文件的.class文件
这里写图片描述

然后我们通过terminal进入到这个目录下面
这里写图片描述

使用javah生成c.h头文件
javah -jni com.hehao.ndkdemo.ndk.NDKTest

执行完成后将生成com_hehao_ndkdemo_ndk_NDKTest.h的一个C文件
这里写图片描述

接下来在main目录下面。新建一个jni目录
这里写图片描述
这里写图片描述

把我们之前用javah生成的.h头文件拷贝或者剪切到jni目录中去
这里写图片描述

创建一个C文件来实现头头文件中声明的函数(名字随意)但是通常我们会使用java+包名+类名这样的名字
并在文件中添加如下代码

#include "com_hehao_ndkdemo_ndk_NDKTest.h"
/*
* Class:     Java_com_hehao_ndkdemo_ndk_Test
* Method:    test
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_hehao_ndkdemo_ndk_NDKTest_hello
        (JNIEnv *env, jobject obj)
{
    return env->NewStringUTF("这里是来自c的:hello world!");
}

这里写图片描述

然后我们使用刚才的rebuild操作再重新构建一下项目 Build->Rebuild Project

PS:然后我发现项目报错了
这里写图片描述
不知道为什么,重启一下AS后重新Rebuild一下,搞定

然后在运行的时候又提示了这个错误
这里写图片描述
按照他说的我们去gradle.properties的末尾添加一行代码

android.useDeprecatedNdk=true

这里写图片描述

再来 又报错了
这里写图片描述
这个错误百度了很多资料,据说是NDK在windows下面的一个bug。我也没有考证,引用别人的说法。
解决办发是在jni目录下创建一个空的c文件
这里写图片描述

再来,终于运行成功了。然后我们在mainActivity中尝试调用一下NDK类的代码

package com.hehao.ndkdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import com.hehao.ndkdemo.ndk.NDKTest;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = (TextView) findViewById(R.id.ndk_test);
        textView.setText(NDKTest.hello());
    }
}

然后发现出错了
这里写图片描述
一定位,发现加载类的时候出问题了
这里写图片描述

这时,需要在App模块的gradle文件中添加

ndk {
            moduleName "ndk_test"          //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,目前可有可无
}

这里写图片描述
生成的.so文件要和我们在之前创建的Java文件中引入的保持一致

成功

这里写图片描述

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android Studio使用中的异常,AndroidStudio使用
  • 详细Android Studio + NDK范例
  • Android Studio下NDK的使用
  • Android Studio NDK基础使用
  • Android Studio Ndk 编程
  • Android Studio NDK开发
  • 用Android Studio 运行ndk 程序

相关文章

  • 2017-05-26MSM8909+Android5.1.1键盘驱动---sn7326介绍
  • 2017-05-26Android V7包学习笔记更新中.....
  • 2017-05-26手游助手应用源码项目,游助手源码项目
  • 2017-05-26MySQL参数table_open_cache的设置
  • 2017-05-26Android中ListView实现图文并列并且自定义分割线(完善仿微信APP),androidlistview
  • 2017-05-26Android ViewPager使用详解
  • 2017-05-26ViewPager和Fragment的组合使用,viewpagerfragment
  • 2017-05-26Linux I/O多路复用
  • 2017-05-26android源码解析之(三)--)HandlerThread
  • 2017-05-26Android 手机卫士--9patch图,

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • pull解析器: 反序列化与序列化,pull序列化
    • Android Studio快捷键,androidstudio
    • android:Activity数据传递之静态变量
    • 好玩的Handler,好玩Handler
    • 安卓第十六天笔记-音频与视频播放,安卓第视频播放
    • My First Android Application Project 第一个安卓应用,android安卓
    • 硅谷商城4--显示购物车商品,硅谷商城4--购物车
    • Activity被回收导致fragment的getActivity为空,fragmentgetactivity
    • 我的android学习经历12,android学习经历12
    • 一个简单的Makefile编译框架

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有