Android 开发了一段时间,一方面 ,感觉不留下点什么。有点对不起自己,

另一方面,好记性不如烂笔头,为了往后可以回头来看看,就当做是笔记,便决定开始写博客。废话不多说 !

今天想搞一搞 ndk 和jni  ,, 现在开始写一个简单的demo

 1. 创建一个新的工程


2. 创建一个新的类 JniText.java  点击Build--Make Project  后

    选中工程 点击F4键 sdk location 中 Android ndk location 选择配置ndk 的路径
    没有下载的可以到这下载:http://wear.techbrood.com/tools/sdk/ndk/

保险起见 点击查看 local.properties 文件
    ndk.dir=D\:\\ndk\\android-ndk-r10e
    sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\sdk
    ok so good 下一步

查看 项目目录下的 E:\text\YipJniDemo\app\build\intermediates\classes\debug 生成了class文件
    接下来 点击底下的Terminal窗口 cd 到当前项目目录
    E:\text\YipJniDemo>cd E:\text\YipJniDemo\app\build\intermediates\classes\debug

   使用javah 生成头文件

E:\text\YipJniDemo\app\build\intermediates\classes\debug>javah -jni com.yip.yipjnidemo.JniText

在 E:\text\YipJniDemo\app\build\intermediates\classes\debug
    下可以看到生成的 com_yip_yipjnidemo_JniText.h

  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class com_yip_yipjnidemo_JniText */
  4.  
  5. #ifndef _Included_com_yip_yipjnidemo_JniText
  6. #define _Included_com_yip_yipjnidemo_JniText
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /*
  11. * Class: com_yip_yipjnidemo_JniText
  12. * Method: getCLangString
  13. * Signature: ()Ljava/lang/String;
  14. */
  15. JNIEXPORT jstring JNICALL Java_com_yip_yipjnidemo_JniText_getCLangString
  16. (JNIEnv *, jobject);
  17.  
  18. #ifdef __cplusplus
  19. }
  20. #endif
  21. #endif

 在项目的src 文件下的    创建jni文件夹 注意 (右键main - new - Folder - JniFolder )
    将生成的文件 com_yip_yipjnidemo_JniText.h 剪切到jni文件夹下

在jni 目录下创建一个com_yip_yipjnidemo_JniText.c 文件

  1. #include "com_yip_yipjnidemo_JniText.h"
  2. /*
  3. * Class: io_github_yanbober_ndkapplication_NdkJniUtils
  4. * Method: getCLanguageString
  5. * Signature: ()Ljava/lang/String;
  6. */
  7. JNIEXPORT jstring JNICALL Java_com_yip_yipjnidemo_JniText_getCLangString(JNIEnv *env, jobject obj)
  8. {
  9. return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
  10. }
  1.  

 下一步, 在app的build.gradle;

  1. defaultConfig下添加
  2. ndk{
  3. moduleName "jnitext" //生成的so名字
  4. abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
  5. }

点击 make-project
    生成  .so 库
  
 此时报了 Error:(13, 0) Error: NDK integration is deprecated in the current
plugin.  Consider trying the new experimental plugin.  For details, see

http://tools.android.com/tech-docs/new-build-system/gradle-experimental. 
Set "android.useDeprecatedNdk=true" in gradle.properties to continue
using the current NDK integration.
<a href="openFile:E:\text\MyJniDemo\app\build.gradle">Open File</a>
    没关系

 

   我们在   工程下的gradle.properties 添加属性

  1. android.useDeprecatedNdk=true

   此时 补全 .YipJniDemo下MainActivity的代码

  1. package com.yip.yipjnidemo;
  2.  
  3. import android.app.Activity;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.widget.TextView;
  7.  
  8. public class MainActivity extends Activity {
  9.  
  10. private TextView txtView;
  11.  
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. txtView= (TextView) findViewById(R.id.txt_jnitext);
  17. JniText jniText=new JniText();
  18. txtView.setText(jniText.getCLangString());
  19. }
  20. }

JniText:

  1. package com.yip.yipjnidemo;
  2.  
  3. /**
  4. * Created by Administrator on 2016/2/22.
  5. */
  6. public class JniText {
  7. static {
  8. System.loadLibrary("jnitext"); //defaultConfig.ndk.moduleName
  9. }
  10. public native String getCLangString();
  11. }

ps:  生成的. so文件有些盆友找不到 。其实是在这里的。

demo地址:

  https://github.com/yipjunjie/JniDemo.git
  http://download.csdn.net/detail/sinat_25135485/9529409
  

【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子的更多相关文章

  1. Android studio 下 NDK Jni 开发 简单例子

    1. 创建一个新的工程 2. 创建一个新的类 JniText.java  点击Build--Make Project  后     选中工程 点击F4键 sdk location 中 Android ...

  2. Android Studio上NDK/JNI开发环境问题

    基础环境: 操作系统 —— Windows 7 Android Studio —— 1.5.1(android-studio-bundle-141.2456560-windows.exe) NDK — ...

  3. 【Android】Eclipse自己主动编译NDK/JNI的三种方法

    [Android]Eclipse自己主动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 一.Eclipse关联cy ...

  4. AndroidStudio如何配置NDK/JNI开发环境

    参考文章: http://www.th7.cn/Program/Android/201509/550864.shtml http://www.open-open.com/lib/view/open14 ...

  5. NDK&JNI开发总结

    NDK&JNI开发总结 简介 附个不错的博客 https://www.jianshu.com/p/87ce6f565d37 在Android Framework中,需要提供一种媒介或 桥梁,将 ...

  6. Cocos发育Visual Studio下一个HttpClient开发环境设置

    Cocos2d-x 3.x相关类集成到网络通信libNetwork图书馆project于.这其中包括:HttpClient分类. 我们需要在Visual Studio溶液中加入libNetwork图书 ...

  7. Cocos开发中Visual Studio下libcurl库开发环境设置

    我们介绍一下win32中Visual Studio下libcurl库开发环境设置.Cocos2d-x引擎其实已经带有为Win32下访问libcurl库,Cocos2d-x 3.x中libcurl库文件 ...

  8. Visual Studio下SQLite数据库开发环境设置

    由于我们介绍的内容都是基于微软的Visual Studio下开发的Win32平台,所以下边我们介绍Visual Studio下SQLite数据库开发环境设置.具体而言我们有两种方式可以在Visual ...

  9. android studio使用ndk,jni随记

    1.下载ndk(会下载到sdk目录下) 2.配置 3.配置build.gradle(app) android { defaultConfig { ndk { moduleName "JniD ...

随机推荐

  1. Oracle_SQL函数-单行函数

    SQL函数 SQL函数分类 SQL函数主要有两种,分为单行函数.多行函数 单行函数:只对一行进行变换,每行返回一个结果.可以转换数据类型,可以嵌套参数可以是一列或一个值 多行函数:多行函数,每次对一组 ...

  2. 简析Geoserver中获取图层列表以及各图层描述信息的三种方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 实际项目中需要获取到Geoserver中的图层组织以及各图层 ...

  3. 浅谈C#中一种类插件系统编写的简单方法(插件间、插件宿主间本身不需要通信)

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 三年多前还在上研时,用C#+反射机制写过插件系统,后来又用M ...

  4. Handle类与线程

    首先声明Handle对象和该类的handleMessage方法: Handler BarHandler = new Handler(){ @Override public void handleMes ...

  5. SQL SERVER 通用分页存储过程,两种用法任你选

    写在前面 从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和 ...

  6. HandlerThread 创建一个异步的后台线程

    使用HandlerThread几大优点: 1.制作一个后台异步线程,需要的时候就可以丢一个任务给它,使用比较灵活; 2.Android系统提供的,使用简单方便,内部自己封装了Looper+Handle ...

  7. .net提交HTML元素到后台,遇到Request报错 解决方案

    对于.NET MVC 项目来说,在Controller中对应的Action方法上打上标签: [ValidateInput(false)] 在MSDN上:HttpRequest 类使用输入验证标志来跟踪 ...

  8. 异步编程系列第05章 Await究竟做了什么?

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  9. 【C#公共帮助类】分页逻辑处理类

    分页逻辑处理类 PageCollection.cs using System; using System.Collections.Generic; using System.Linq; using S ...

  10. SqlServer-无限递归树状图结构设计和查询

    在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...