Android Studio 之 NDK篇

由于工作内容的关系,对于NDK的工作涉及比较广(保密性,安全性),所以本章内容讲述一下NDK的基本使用过程。

  网上也有很多这样的教程或者描述,但描述的并不完全

  开发工具:Android Studio 2.1.2 

  NDK版本:android-ndk-r10e,支持64位so库的编译

  JDK版本:1.8 64位

  使用步骤如下:

  第一步:NDK环境的搭建

  ①jdk,Android SDK这些准备充分(只要能正常使用Android Studio的,这一条基本不用考虑)

  ②下载NDK,可以通过Android Studio的SDK Manager下载,也可以通过这个链接下载:下载地址,至于版本的话,根据自己电脑系统自行选择最新版本,

   如果访问不了,需要使用FQ的话,可以下载天行VPN(有试用版,一天一个小时,关键是不要钱还能FQ),FQ工具下载链接:VPN工具下载

  第二步:新建一个Project,完成NDK的配置

  ①在工程的local.properties里面添加NDK的路径代码:

ndk.dir=C\:\\android-ndk-r10e

  

  ②在gradle.properties里面声明使用NDK的代码

android.useDeprecatedNdk=true

  

  ③在app的build.gradle里面,添加NDK的编译信息(包括生成的so库名字,以及编译出来的各种平台版本)

复制代码
apply plugin: 'com.android.application'android {compileSdkVersion 23buildToolsVersion "24.0.0"defaultConfig {applicationId "edan.com.as_ndk_demo"minSdkVersion 11targetSdkVersion 23versionCode 1versionName "1.0"ndk{moduleName "MyTestJniLib" //生成的.so的名字abiFilters "armeabi","armeabi-v7a","x86"}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}sourceSets {main {jniLibs.srcDirs = ['libs']}}}dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'compile 'com.android.support:appcompat-v7:23.4.0'
}
复制代码

  第三步:编辑native方法,生成.h头文件

  ①编辑native方法

 View Code

  ②点击Build-->Make Project,生成class文件

  ③找到class文件,在app->build->intermediates->classes->debug目录下:

  ④通过javah命令生成.h头文件,点击Android Studio底下菜单中的Terminal

  依次敲入:

cd app\build\intermediates\classes\debug
javah -jni edan.com.as_ndk_demo.ndktest.NdkJniUtils

使用javah的时候,具体的包名按照实际情况来书写

  没有什么错误的话,可以在debug目录下看到.h的头文件

  

复制代码
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class edan_com_as_ndk_demo_ndktest_NdkJniUtils */#ifndef _Included_edan_com_as_ndk_demo_ndktest_NdkJniUtils
#define _Included_edan_com_as_ndk_demo_ndktest_NdkJniUtils
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     edan_com_as_ndk_demo_ndktest_NdkJniUtils* Method:    getCLanguageString* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_edan_com_as_1ndk_1demo_ndktest_NdkJniUtils_getCLanguageString(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif
复制代码

  第四步:根据生成.h头文件,以及新建的.c或者.cpp文件,生成.so库文件

  ①在app->src->main目录下新建一个jni文件夹,用来存c/c++的头文件以及源文件,将刚刚生成.h头文件剪切到这里来,然后新建一个.c或者.cpp文件

  

复制代码
#include "edan_com_as_ndk_demo_ndktest_NdkJniUtils.h"
/** Class:     com_example_edu_ndktest_NdkJniUtils* Method:    getCLanguageString* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_edan_com_as_1ndk_1demo_ndktest_NdkJniUtils_getCLanguageString(JNIEnv *env, jobject obj){return (*env)->NewStringUTF(env,"My name is Ouyangshengduo,Hi!");}
复制代码

  ②点击Build->Make Project进行编译,生成.so库文件,路径:app->build->intermediates->ndk->debug->lib下:

  

  ③拷贝lib下的这些文件夹,到app->libs下:

  第五步:通过MainActivity的TextView显示C里面的内容:

  

复制代码
package edan.com.as_ndk_demo;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;import edan.com.as_ndk_demo.ndktest.NdkJniUtils;public class MainActivity extends AppCompatActivity {private TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView = (TextView) findViewById(R.id.text);NdkJniUtils ndk_util = new NdkJniUtils();mTextView.setText(ndk_util.getCLanguageString());}
}
复制代码

 

  至此,Android Studio 的NDK的基础篇讲述完了,期间遇到任何问题或者错误,将错误信息copy去google,基本都能解决,当然,也可以留言,知道的必将言无不尽。

  项目源码下载地址:源码下载

转载于:https://www.cnblogs.com/fnlingnzb-learner/p/7207468.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql codesmith_CodeSmith连接Mysql配置

&#xff11;&#xff0c;首先需要将MySql.Data.dll复制到codesmith安装目录下v6.5/bin文件夹下&#xff0c;注意dll的版本&#xff12;&#xff0c;其次采用的是.net4.0的配置文件&#xff0c;找到C:\Windows\Microsoft.Net\Framework\v4.0.30319\Config\machine在其中的DbPro…

避免一个用户多次登录修改版

原来的代码参见这里http://www.qiuhao.com//dispbbs.asp?boardID2&ID6228&page1 今天仔细看了这段代码,发现这段代码大有优化的余地 因为maxSessions 这个值可能会很大,我这里测试环境有3万多个,启动时要浪费半分钟左右 另外sessionId是个随机数,用1到maxSessions其实…

Maven工程 报 Diamond types are not supported at language level ‘5‘

选择file project Structure 1.Project – Project language level 选择8 2. Modules – Language level&#xff1a; 选择8

php excel导入mysql_PHP将Excel内容导入mysql数据库

//exp.php 用于导出include_once conn.php;$savename date("YmjHis");mysql_query("Set Names gbk");$file_type "vnd.ms-excel";$file_ending "xls";header("Content-Type: application/$file_type;charsetbig5");heade…

Ubuntu 16.04安装idea

此篇为http://www.cnblogs.com/EasonJim/p/7139275.html的分支页。 前提&#xff1a;必须正确安装JDK和Tomcat。 下载&#xff1a; https://www.jetbrains.com/idea/download/previous.html 这里可以下载社区版本&#xff0c;也可以下载以往历史版本。 安装过程&#xff1a; 解…

深表歉意

近期有许多读者朋友向我反应&#xff0c;他们在互动出版网、当当网、卓越网等大型IT书店中购买了《网管员必读》系列第二版时&#xff0c;在下订单后常常被告知有些图书缺货无法发货。本来就是想购买全套的&#xff0c;结果无奈地少了几本&#xff08;如《网管员必读——网络应…

Error occurred while trying to proxy request

Error occurred while trying to proxy request /api/v1/ProveApplys/GetApplyTypes from 127.0.0.1:8010 to https://10.112.102.20:44321 (ETIMEDOUT) 解决方法&#xff1a; 清空浏览器缓存

拉单杠

2017 7 19 一个转载于:https://www.cnblogs.com/liyongguo/p/7211935.html

python class函数报错_Python multiprocess pool模块报错pickling error问题解决方法分析

本文实例讲述了Python multiprocess pool模块报错pickling error问题解决方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;问题之前在调用class内的函数用multiprocessing模块的pool函数进行多线程处理的时候报了以下下错误信息:PicklingError: Cant pickle : attr…

sap idoc techniques

*//初探  *//IDOC 的创建 *//IDOC 的创建 *//IDOC 的创建 DATA: g_idoc_ctl LIKE edidc, g_e1maram LIKE e1maram, g_e1maktm LIKE e1maktm. DATA: gi_ret_ctl LIKE edidc OCCURS 0, gi_idoc_data LIKE edidd OCCURS 0 WITH HEADER LINE. * BUILD IDOC_CTL …

mysql注入漏洞修复方案_注入漏洞修复方案

近看到网上曝出的dedecms版本的一个注入漏洞利用&#xff0c;漏洞PoC和分析文章也已在网上公开。但是在我实际测试过程当中&#xff0c;发现无法复现。南昌办公应用培训南京电脑维护必备原因是此漏洞的利用需要一定的前提条件&#xff0c;而原分析文章当中并没有交代这些&#…

applicationcontext理解使用

Spring ApplicationContext 容器 Application Context 是 spring 中较高级的容器。和 BeanFactory 类似&#xff0c;它可以加载配置文件中定义的 bean&#xff0c;将所有的 bean 集中在一起&#xff0c;当有请求的时候分配 bean。 另外&#xff0c;它增加了企业所需要的功能&am…

【品名】妻子

【品名】妻子 【通用名】老婆 【化学名称】已婚女性 【成分】水、蛋白质、脂肪、核糖核酸、碳水化合物及少量矿物质&#xff0c;气味幽香。 【理化性质】酸性&#xff1b;可分为一价&#xff08;嫁&#xff09;、二价&#xff08;嫁&#xff09;、三价&#xff08;嫁&#xff0…

python函数应用实例_【Python 第22课】 函数应用示例

前两课稍稍介绍了一下函数&#xff0c;但光说概念还是有些抽象了&#xff0c;今天就来把之前那个小游戏用函数改写一下。我希望有这样一个函数&#xff0c;它比较两个数的大小。如果第一个数小了&#xff0c;就输出“too small”如果第一个数小了&#xff0c;就输出“too big”…

发给

分享转载于:https://www.cnblogs.com/chun6/p/7214279.html

临时表使用方法

在SQL SERVER2000中&#xff0c;建立临时表方式有3种&#xff1a; 1&#xff09;create table #table_name(field1 type,field2 type,..........) insert into #table_name values(..............) select * from #table_name 2&#xff09;create table tempdb.table_name(fie…

已安装nginx动态添加模块

说明&#xff1a;已经安装好的nginx&#xff0c;需要添加一个未被编译安装的模块&#xff0c;需要怎么弄呢&#xff1f; 具体&#xff1a;这里以安装第三方ngx_http_google_filter_module模块为例nginx的模块是需要重新编译nginx&#xff0c;而不是像apache一样配置文件引用.so…

linux内核开发_Linux 内核的代码仓库管理与开发流程简介

作者简介&#xff1a;老 U&#xff0c;致力于开源自由软件推广。原创雄文&#xff1a;由泰晓读者投递的各类社区原创好文。版权声明&#xff1a;本文最先发表于 “泰晓科技” 微信公众号&#xff0c;欢迎转载&#xff0c;转载时请在文章的开头保留本声明。入门 Linux 内核学习时…