Android Studio 开发之NDK混合开发的应用

NDK简述

Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。

NDK包括了
  • 从C / C++生成原生代码库所需要的工具和build files。
  • 将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。
  • 支持所有未来Android平台的一系列原生系统头文件和库
为何要用到NDK?
概括来说主要分为以下几种情况:
1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库被反编译的难度较大。
2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。

NDk之androidstudio 环境配置:

  1在gradle.properties里面声明使用NDK的代码
android.useDeprecatedNdk=true

2在工程的local.properties里面添加NDK的路径代码:
ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\ndk-bundle
    sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk

3.在app的build.gradle里面,添加NDK的编译信息

 ndk {
            moduleName "myJni"
            abiFilters "armeabi", "arm", "x86"
        }
  sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }


三:编译代码:

1.编译Native方法,生成.h文件:

package com.zzh.hellojni;

/**
 * Created by Administrator on 2017/8/23/023.
 */

public class MyJni {

    public native String getString();
}


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

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



用命令行,到helloJni文件加下:



>cd hellojni\build\intermediates\classes\debug

   C:\Users\Administrator\FirstApp\android\hellojni\build\intermediates\classes\debug>javah -jni com.zzh.hellojni.MyJni
  会生成一个com_zzh_hellojni_MyJni.h文件


内容为:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zzh_hellojni_MyJni */

#ifndef _Included_com_zzh_hellojni_MyJni
#define _Included_com_zzh_hellojni_MyJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_zzh_hellojni_MyJni
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_zzh_hellojni_MyJni_getString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

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

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

#include "edan_com_as_ndk_demo_ndktest_NdkJniUtils.h"
/*
 * Class:     com_example_edu_ndktest_NdkJniUtils
 * Method:    getCLanguageString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL JNICALL Java_com_zzh_hellojni_MyJni_getString
  (JNIEnv *env, jobject obj){
     return (*env)->NewStringUTF(env,"Hi Jni!");
  }

这样准备工作就完成了然后 点击Build->Make Project进行编译,生成.so库文件,路径:app->build->intermediates->ndk->debug->lib下:

如果执行失败。你可以把刚刚生成的Mk文件copy到jni文件夹下,然后使用命令行执行:

然后命令行到次文件加下:

如下
C:\Users\Administrator\FirstApp\android\hellojni\src\main\jni> ndk-build


然后把生成的SO文件copy到libs下面就可以了

这样一个完整NDk开发流程就走完了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值