AndroidStudio NDK开发 之 jni生成so文件

来源:互联网 发布:c stl源码剖析 pdf 编辑:程序博客网 时间:2024/06/05 08:49

最近在想如何将代码写到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

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 :=ndkLOCAL_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等文件


结束!
















原创粉丝点击