• 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 JNI 开发工程

Android Studio上面使用Ndk JNI 开发工程

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

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

Android Studio上面使用Ndk JNI 开发工程


Ps:最近比较闲,so.多更新几篇博客算是总结一下.顺便鄙视一下有的programmer照搬网上面文章,并没有自己去进行相关的实践验证.导致网上面的博客千篇一律,只要最初写博客的人踩坑后面的人全都踩坑.对这类不经过实际检验就大抄特抄的人深深的鄙视一下\

ok 接下来我们进入今天的正题,也就是在Android studio里面如何正确的使用和配置ndk.如果有对jni不了解的童鞋建议先去学习下JNI技术再来看本篇博客.

老规矩,我们先来看看实现的效果:点击按钮就会调用c代码的方法,这里C代码的方法会返回一个字符串,我们将这个字符串进行展示.

\

 

准备工作:首先我们来看看进行jni开发都需要哪些东西:Android studio1.51(正式版),android-ndk-r11b程序员一只.准备工作是将将ndk下载下来配置好NDK-HOME(方法和JAVA-HOME配置雷同,故不做赘述,不会自行百度,据说也可以不用配置(⊙﹏⊙)).

下面开始手把手教程\

1.首先使用Android studio创建一个android工程.并且关联上ndk.这里关联的方式有两种一种是在工程设置里面进行配置,另外的一种是在工程目录的local.properties里面配置ndk的路径,两种方式选其中一种即可如下图所示:

(方案一)

\

(方案2)

\ 2.打开grade.properties文件,在末尾添加:android.useDeprecatedNdk=true.

\

3.然后在模块的build.gradle文件里面进行ndk参数的配置.

 

 

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.dapeng.ndkdemo"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        ndk {
            moduleName "MyJniLibName"            //生成的so名字(可自己进行指定)
            abiFilters "armeabi", "armeabi-v7a", "x86"    //输出指定三种abi体系结构下的so库。目前可有可无(默认是全选的)。
            //ldLibs "log"                                //如果要使用log就把这个加上
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
}

 

4.创建一个类编写调用c代码的方法.然后rebuild项目.加载库的名字就是上面我们在buil.gradle里面配置的moduleName.调用c代码的方法必须要用native进行修饰.(这里需要注意的是不能在里面写中文,包括注释,否则生成头文件会报错误: 编码GBK的不可映射字符 )

 

public class JniUtils {
    static {
        System.loadLibrary("MyJniLibName");   
    }

    public native String getStringFromC(); 
}
5.待工程build完毕以后,进入到如下图所示的debug文件夹查看是否生成了我们编写的类对应的.class文件.目录如下.

 

\
6. 如果正确的生成了class文件,接下来生成头文件.打开android studio的terminal(android studio自带的控制台,在win10上面需要进行设置才能正常的输入,具体方式问度娘)或者是cmd控制台.使用jdk的生成工具生成头文件.先cd到我们的模块的java文件夹下,然后使用javah -jni +调用C代码的类的全路径名称.这里千万要看清楚是在哪个路径下编译生成的.生成好以后就可以在工程目录下看到.h格式头文件.(仔细看我贴出来的路径,app就是模块名)

\

\

7.依次点击工程new-folder-jnifolder生成jni文件夹(也可以自己在java包的同级目录下直接创建jni文件夹),在jni文件夹里面创意一个任意名称且是以.c格式结尾的文件.将刚刚生成的.h头文件里面的内容复制到.c文件里面并且进行编辑.

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class com_dapeng_ndkdemo_JniUtils */

#ifndef _Included_com_dapeng_ndkdemo_JniUtils
#define _Included_com_dapeng_ndkdemo_JniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_dapeng_ndkdemo_JniUtils
 * Method:    getStringFromC
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_dapeng_ndkdemo_JniUtils_getStringFromC
        (JNIEnv *env, jobject obj) {
    return (*env)->NewStringUTF(env, "hello java from c");
} ;

#ifdef __cplusplus
}
#endif
#endif
8.最后我们通过JniUtils里面的编写好的方法来调用c代码的方法.就可以了.至此所有代码编写完毕

 

 

public class MainActivity extends AppCompatActivity {

    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.tv);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mTextView.setText(new JniUtils().getStringFromC());
            }
        });
    }
}

 

9.点击rebuild project ,待工程build完毕以后进入到buil的intermediates文件夹下面看看是否生成了ndk文件夹,接着再看看ndk文件夹里面是否有.so文件,如果有就说明大工告成了.that is all. plase enjory it.\

\


 

 </div>

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

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

  • Android Studio上面使用Ndk JNI 开发工程

相关文章

  • 2017-05-26Android 数据库SQLite 写入SD卡,androidsqlite
  • 2017-05-26关于TCP MSS的内核设置
  • 2017-05-26Android中使用ViewPager实现屏幕页面切换和页面轮播效果,androidviewpager
  • 2017-05-26android插件开发-就是你了!启动吧!插件的activity(一)
  • 2017-05-26初探ListView,初探网
  • 2017-08-23安卓ProgressBar水平进度条的颜色设置
  • 2017-05-26android开发之路04(初级android工程师必会,你懂得!),04android
  • 2017-05-26android Unable toexecute dex: method ID not in [0, 0xffff]: 65536问题
  • 2017-05-26Redis3.0.7集群部署完整版
  • 2017-05-26Android新手入门2016(13)--阻塞对话框PopupWindow

文章分类

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

最近更新的内容

    • ULog远程日志——让Android调试更加方便直观
    • Touch事件分发
    • 硅谷新闻1--引导界面GuideActivity,1--guideactivity
    • 硅谷新闻4--解决页签手指按下从左到右滑动的bug,硅谷4--
    • android浏览器 源码共享,android浏览器源码
    • Android面试准备 第二天 第五例 数据存储
    • android 之 启动画面的两种方法,android两种方法
    • 可展开的列表组件——ExpandableListView深入解析,expandablelist展开
    • 单机搭建Android开发环境(一),单机搭建android开发
    • Android自定义ViewGroup打造各种风格的SlidingMenu

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

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