AndroidStudio NDK开发 之 jni生成so文件

最近在想如何将代码写到so包里,以防代码被破解~ 当然了若有人想还是有办法的,哈哈哈!

来吧!


目标:在安卓studio中生成so包;

工具:安卓studio2.0;


1、下载NDK     我下载的是android-ndk-r13b (http://www.androiddevtools.cn/)

2、 配置系统环境变量 Path   D:\android-ndk-r13b-windows-x86_64\android-ndk-r13b

AndroidStudio NDK开发 之 jni生成so文件_第1张图片

3、cmd 下ndk-build如下所示记为成功

Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
D:\android-ndk-r13b-windows-x86_64\android-ndk-r13b\build\\..\build\core\build-local.mk:151: *** Android NDK: Aborting    .  Stop.


4、配置安卓studio的ndk路径

D:\android-ndk-r13b-windows-x86_64\android-ndk-r13b


5、下载tools如下图,LLDB、NDK还有CMake没有截图

接下来上代码


一、在项目的build_gradle的android目录下

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    ndk{
        moduleName"ndk"
        abiFilters "armeabi","armeabi-v7a","x86"//输出指定三种abi体系结构下的so库,目前可有可无
    }
}
sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

二、创建java类

/**
 * Created by haohuo on 2017/8/17.
 */
public class JniUtils {
    Context mContext;

    public JniUtils(Context context) {
        mContext = context;
    }

    static {
        System.loadLibrary("ndk");//注意这个名字是我们在build.gradle中ndk中配置的moduleName
    }

    public native String NDK();

三、在Terminal输入命令

cd app/src/main/java进入目标目录

javah -jni com.marvin.demo.utils.JniUtils

四、在app目录下创建jni文件夹

创建Android.mk文件代码

代码直接拷贝(拷贝后把注释删掉,否则报错)

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=ndk
LOCAL_SRC_FILES :=ndk.c//注意.c文件的名字和java类及build_gradle中名称保持一致
include $(BUILD_SHARED_LIBRARY)


创建对应.c文件,我这里取名ndk.c

#include "com_marvin_demo_utils_JniUtils.h"
//这里引入我们刚才的.h头文件

JNIEXPORT jstring JNICALL Java_com_marvin_demo_utils_JniUtils_NDK
   (JNIEnv *env, jobject obj){
         return (*env)->NewStringUTF(env,"Im NDK");
   }


万里江山已完成一大半,不急就差最后一抖了


五、在app的main目录下创建jniLibs

Terminal下执行命令ndk-build

好神奇的发现jniLibs生成熟悉的arm等文件


结束!

















你可能感兴趣的:(安卓开发)