ndk开发,JNI

NDk的用处:1,核心代码保护,写入由于apk的Java层代码很容易被反编译,而C/C++库反汇难度较大。

NDK开发常用于-驱动开发、无线热点共享、数学运算、实时渲染的游戏、音视频处理、文件压缩、人脸识别、图片处理等。 

JNI  java native interface

1、 NDK是一系列工具的集合。

NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者帮助时巨大的。

2、NDK提供了一份稳定、功能有限的API头文件声明。这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、log库(liblog)。

配置ndk 环境    

 

 

1,首先是so文件的生产

      创建Native方法

package com.xcm91.relation.ndkapp;

/**
 * Created by lhy on 2017/5/24.
 */

public class NdkJni {

    static {
        System.loadLibrary("native-lib");
    }

    //获取C中隐藏的AppKey
    public native String getStringFromNative(int x, int y); //native


    /**
     *
     * @param x
     * @param y
     * @return
     */
    public static int add(int x, int y) {
        return x + y;
    }

    /**
     */
    public static void callNullMethod() {
    }

    /**
     */
    public static void callStringMethod(String str) {
    }

    public void helloFromJava() {
    }

}

2,使用android studio自带的Terminal进入cd app/src/main/java    然后执行

javah -d ../jni com.ndkapp.NdkJni

在ndk会自动生成一个.h文件

3,jni目录创建.c文件引用.h文件

#include "com_ndkapp_NdkJni.h"


JNIEXPORT jstring JNICALL Java_com_ndkapp_Ndk_getStringFromNative(JNIEnv *env, jobject obj,jint x,jint y)
 {
 return env->NewStringUTF("Hello.Jni~!~!") ;
}

4,创建Android.mk

#Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
# 库名
LOCAL_MODULE := native-lib
# 用到的.c文件
LOCAL_SRC_FILES :=native-lib.c
LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)

创建 Applicatio.mk

APP_PLATFORM := android-16
APP_ABI := all

5,用命令到jni文件夹 用命令   ndk-build生成so文件

6,  System.loadLibrary("hello"),把so库加载进来(可以调用native本地方法了)

细节

local.properties 设置ndk.dir
目录gradle.properties 添加一行 android.useDeprecatedNdk=true
在当前Module下的build.gradle 文件下的defaultConfig节添加
ndk {
    abiFilters "arm64-v8a", "armeabi-v7a", "x86", "x86_64"
}


检查so文件是否生成

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值