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 23
    buildToolsVersion "24.0.0"

    defaultConfig {
        applicationId "edan.com.as_ndk_demo"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        ndk{
            moduleName "MyTestJniLib" //生成的.so的名字
            abiFilters "armeabi","armeabi-v7a","x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles 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方法

 

  ②点击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;

    @Override
    protected 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,基本都能解决,当然,也可以留言,知道的必将言无不尽。

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

时间: 07-18

Android Studio 之 NDK篇的相关文章

Mac下Android studio 之NDK配置教程

Mac下Android studio 之NDK配置教程(一) 1.概述 最近项目全线转移到Mac下使用使用Android studio开发.遇到关键代码封装到 ***native***层,此时在win下的NDK配置步骤全部失效. 为此,花费了大量时间用来查阅资料,在此,记录下来,分享给大家供以后配置中作为参考. 2.环境 本人使用的开发配置 是:MAC OS 10.10 +androioid studio 1.2+android-ndk-r10e-darwin-x86_64+git .其他配置类

Android Studio 使用NDK开发

Android Studio 使用NDK编程 使用Android Studio有半年多了,感觉很好用,不就感觉费劲的就是NDK的支持一直不是很好,再Bate版的时候好像0.4.x之前可以使用NDK,当然本身Android Studio本身是支持NDK编译的,下面我就来解释一下怎么使用Android Studio来编译. 很简单,首先要创建你的项目,创建完成之后点击项目右键new->Folder->JNI Folder,如图 然后就生成了jni文件夹 再往里面添加你的c/cpp文件和Androi

用Android Studio 运行ndk 程序

最近准备研究一下android双进程守护,由于此前用eclipse 写jni习惯了,现在主要用as 工具.在此也试着写个demo 然后在对双进程守护进行研究 1.所需工具 android studio 1.4 ndk :android-ndk-r9d -.其它必备在此就不叙述 2.示例介绍 1).项目创建 打开as 创建一个project 输入包名 com.cayden.jnis 在此如果采用as 生成的布局和activity ,后续运行会出现问题. 具体后续在问题部分会进行说明 2).创建jn

用Android Studio 执行ndk 程序

近期准备研究一下android双进程守护,因为此前用eclipse 写jni习惯了.如今主要用as 工具.在此也试着写个demo 然后在对双进程守护进行研究 1.所需工具 android studio 1.4 ndk :android-ndk-r9d -.其他必备在此就不叙述 2.演示样例介绍 1).项目创建 打开as 创建一个project 输入包名 com.cayden.jnis 在此假设採用as 生成的布局和activity ,兴许执行会出现故障. 详细兴许在问题部分会进行说明 2).创建

[Android] 环境优化配置Android Studio发展NDK

======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 站点:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/42040963 ========================================================

使用Android Studio进行ndk开发的准备

1. gradle-ex2. ndk开发包3. 项目目录结构4. lldb调试器 1. 一般来说gradle不是必需的,gradle也是可以进行ndk编译的,然而你需要在编译时使用更多(多于一个)c++编译选项时,以及让IDE可以使用lldb进行调试,或者是针对ndk开发和编译有更好的支持时,gradle-ex就是你所需要的.gradle-ex的ex不是扩展而是experimental实验非正式.它对ndk相关的配置进行了增强,同时又语法不兼容gradle,并且在ndk相关以外的配置沿着的是gr

Android Studio制作.so库实践

前言 因为工作需要可能要用到JNI开发,本篇文章就分享一下我在这方面的实践,以前我们使用Eclipse做NDK开发,非常麻烦,需要配cygwin的编译环境,后面NDK功能完善才逐渐简单点,如果想了解Eclipse如何配置NDK编译环境可以参考我以前发表的旧文: Cocos2d-x 2.2.3 使用NDK配置编译环境 JNI_Android项目中调用.so动态库 Eclipse的如何通过NDK生成so库就不多说了,目前已经不适用于Android开发,建议使用AS进行开发,本篇也是基于AS来进行讲解

【Android】Android Studio 1.5+ 中混合调试Native和Java代码

[Android]Android Studio 1.5+ 中调试Native和Java代码 Android Studio 1.5+表示Android Studio 1.5版本以及以上. 网上大部分中文或英语教程还是停留在老版本的Android Studio的Debug的设置,要么不全.正好最近工作中要在Android Studio中调试C++代码,就来写一篇咯. Android Studio 1.5+的调试设置与之前有所不同. 而且新版中推出了一个Hybrid的调试:可以混合调试Native代码

android studio ndk-builld方式开发

之前都是在Ubuntu开发,项目也是老的,自然也就顺理成章的用eclipse做各种android的开发.最近想在android studio 切换下,有点不习惯.android studio 为ndk开发提供了两种不同的方式,使用cmake自动编译脚本 和类似eclipse上的ndk-build.这两者之间使用区别在于,如果想直接开发新的单模块可以考虑使用cmake,ide有自带辅助插件,让程序员使用起来更加舒心.如果想在第三方源码库上面做二次开发,或者需要多个源码库关联,感觉还是使用ndk-b

安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)

前言 以前也讲过NDK开发,但是开始是抱着好玩的感觉去开始的,然后呢会helloWord就觉得大大的满足,现在静下来想这NDK开发到底是干什么呢? NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高效些但是在java与C相互调用时平白又增大了开销(其实效率不见得有所提高),然后呢,基于安全性的考虑也是为了防止代码被反编译我们为了安全起见,使用C语言来编写这些重要的部分来增大系统的安全性,最后呢生成so库便于给人提供方便. 好了,我们来看一下qq的结构,我们就