最近在想如何将代码写到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 :=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等文件
结束!