【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子
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
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_yip_yipjnidemo_JniText */ #ifndef _Included_com_yip_yipjnidemo_JniText
#define _Included_com_yip_yipjnidemo_JniText
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_yip_yipjnidemo_JniText
* Method: getCLangString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_yip_yipjnidemo_JniText_getCLangString
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
在项目的src 文件下的 创建jni文件夹 注意 (右键main - new - Folder - JniFolder )
将生成的文件 com_yip_yipjnidemo_JniText.h 剪切到jni文件夹下
在jni 目录下创建一个com_yip_yipjnidemo_JniText.c 文件
#include "com_yip_yipjnidemo_JniText.h"
/*
* Class: io_github_yanbober_ndkapplication_NdkJniUtils
* Method: getCLanguageString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_yip_yipjnidemo_JniText_getCLangString(JNIEnv *env, jobject obj)
{
return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
}
下一步, 在app的build.gradle;
defaultConfig下添加
ndk{
moduleName "jnitext" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
}
点击 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 添加属性
android.useDeprecatedNdk=true
此时 补全 .YipJniDemo下MainActivity的代码
package com.yip.yipjnidemo; import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView; public class MainActivity extends Activity { private TextView txtView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtView= (TextView) findViewById(R.id.txt_jnitext);
JniText jniText=new JniText();
txtView.setText(jniText.getCLangString());
}
}
JniText:
package com.yip.yipjnidemo; /**
* Created by Administrator on 2016/2/22.
*/
public class JniText {
static {
System.loadLibrary("jnitext"); //defaultConfig.ndk.moduleName
}
public native String getCLangString();
}
ps: 生成的. so文件有些盆友找不到 。其实是在这里的。
demo地址:
【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子的更多相关文章
- Android studio 下 NDK Jni 开发 简单例子
1. 创建一个新的工程 2. 创建一个新的类 JniText.java 点击Build--Make Project 后 选中工程 点击F4键 sdk location 中 Android ...
- Android Studio上NDK/JNI开发环境问题
基础环境: 操作系统 —— Windows 7 Android Studio —— 1.5.1(android-studio-bundle-141.2456560-windows.exe) NDK — ...
- 【Android】Eclipse自己主动编译NDK/JNI的三种方法
[Android]Eclipse自己主动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 一.Eclipse关联cy ...
- AndroidStudio如何配置NDK/JNI开发环境
参考文章: http://www.th7.cn/Program/Android/201509/550864.shtml http://www.open-open.com/lib/view/open14 ...
- NDK&JNI开发总结
NDK&JNI开发总结 简介 附个不错的博客 https://www.jianshu.com/p/87ce6f565d37 在Android Framework中,需要提供一种媒介或 桥梁,将 ...
- Cocos发育Visual Studio下一个HttpClient开发环境设置
Cocos2d-x 3.x相关类集成到网络通信libNetwork图书馆project于.这其中包括:HttpClient分类. 我们需要在Visual Studio溶液中加入libNetwork图书 ...
- Cocos开发中Visual Studio下libcurl库开发环境设置
我们介绍一下win32中Visual Studio下libcurl库开发环境设置.Cocos2d-x引擎其实已经带有为Win32下访问libcurl库,Cocos2d-x 3.x中libcurl库文件 ...
- Visual Studio下SQLite数据库开发环境设置
由于我们介绍的内容都是基于微软的Visual Studio下开发的Win32平台,所以下边我们介绍Visual Studio下SQLite数据库开发环境设置.具体而言我们有两种方式可以在Visual ...
- android studio使用ndk,jni随记
1.下载ndk(会下载到sdk目录下) 2.配置 3.配置build.gradle(app) android { defaultConfig { ndk { moduleName "JniD ...
随机推荐
- 把DATATABLE,DS中的内容用HTML的方式显示
前几天,在搞一个数据显示的时候,因为是不固定的列的,所以需要动态创建列,这里面就运用一下,直接把数据库的Table显示在Html上,有两种方法,但是都有相应的缺点,第一个,如果内容太多,长度不好控制, ...
- Java内存模型深度解析:顺序一致性--转
原文地址:http://www.codeceo.com/article/java-memory-3.html 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据 ...
- 淘宝web前端开发岗面试经历及感悟
今天下午四点接到淘宝UED的面试电话,很突然,很激动.现在怀着淡淡的忧伤为之文以志一下. 1.自我介绍一下. 我xx时候毕业,在xx公司任xx职务,主要负责xx balabala.(怕公司同事听到,接 ...
- Spring-AOP实践 - 统计访问时间
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...
- Replace Temp with Query
double GetPrice() { int basePrice = _quantity * _itemPrice; double discountFactor; ) { discountFacto ...
- 这些Javascript知识点,面试和平时开发都需要
No1.语法和类型 1.声明定义 变量类型:var,定义变量:let,定义块域(scope)本地变量:const,定义只读常量. 变量格式:以字母.下划线“_”或者$符号开头,大小写敏感. ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入
一.测试仓储层.业务层是否能实现对数据库表的操作 1.创建IsysUserInfoRepository接口来继承IBaseRepository父接口 namespace Wchl.WMBlog.IRe ...
- 2.简单的Code First例子(EF Code-First系列)
现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简 ...
- EC笔记,第二部分:10.让=返回指向*this的引用
Effective C++ 学习笔记 10 让=返回指向*this的引用 Table of Contents 1. 原因 2. 建议:在没有充分理由标新立异前,最好的做法是遵从传统. –by SkyF ...
- oracle 序列、视图、索引
序列 创建 在sequences里 作用 生成自动增长(或减少)的整数值 经常添加数据时使用,可控性好 写法:序列名.nextval 获取下一个序列值 序列名.currval 获取当前序列值,不常 ...