Android Studio 简单制作so文件

有时候一些数据需要放在一些不可阅读的文件中进行存储,由于java的特性,注定了这些私密信息不能放到Java文件中去,而android中一般放在so库文件中,来增加破解难度下面开始做一些android studio 开始做so库之前的一些准备工作,首先,先去下载android NDK
Android Studio 简单制作so文件_第1张图片
屏幕快照 2018-11-15 下午4.52.14.png

CMaker我还不会用,用的是NDK方式

其次配置项目目录下的local.properties 文件下的ndk目录

Android Studio 简单制作so文件_第2张图片
屏幕快照 2018-11-15 下午5.01.40.png

然后配置app下的bulid.gradle
指定你要做so库的名字,和你需要支持的类型

 ndk {

            moduleName "hyUtils2_jni"
            abiFilters "armeabi", "armeabi-v7a", "x86"

        }

首先写一个工具类,这里先声明一点,也是我踩坑的地方就是,这个工具类的地方必须跟你将来要调用so库文件的工具类的地方的包名必须一致

public class HYTools {

    static {
        System.loadLibrary("hyUtils2_jni");
    }
    public static native String getKey2();
}

写完这个类后,点击Bulid --->MakeProject 构建一下

然后去
Android Studio 简单制作so文件_第3张图片
WechatIMG28.png

找到这个文件的路径,然后通过命令cd 到当前com.test.test.utils所在的dbug文件夹下,
执行命令 Javah -jni com.test.test.utils.HYTools
执行完后再debug文件夹下会生成一个.h文件,内容如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
#include "../../../../../Library/Android/sdk/android-ndk-r16b/sysroot/usr/include/jni.h"
/* Header for class com_test_utils_HYTools */

#ifndef _Included_com_test_utils_HYTools
#define _Included_com_test_utils_HYTools
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_test_utils_HYTools
 * Method:    getKey1
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_test_utils_HYTools_getKey2
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

这个文件是自动生成的不需要修改

然后在src-->main-下新建一个包名为jni把上面生成的文件拷贝到当前目录

如图所示
这里忽略其他两个文件


Android Studio 简单制作so文件_第4张图片
1542275136907.jpg

build.gradle 里面配置android.mk构建文件

 buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }

       externalNativeBuild {
           ndkBuild {
               path 'src/main/jni/Android.mk'
           }
       }
   }

下面贴android.mk文件,其他是固定格式(我也没研究过了)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hyUtils2_jni    //so库名

LOCAL_SRC_FILES := ndkdemo.c   //这个文件里就要写你要做的逻辑内容了 

include $(BUILD_SHARED_LIBRARY)


下面贴ndkdemo.c的文件内容,这个是个c文件大家看内容就大概知道是做什么的了



#include 
#include "com_test_utils_HYTools.h"

JNIEXPORT jstring JNICALL Java_com_test_utils_HYTools_getKey2
        (JNIEnv *env, jobject obj){
    return (*env)->NewStringUTF(env,"123244343424");
}



对的,你的需要他做什么就是在这里面写的

写到这里其实已经接近成功了 ,剩下的就是重新Make Project一下了 如果没有报错的话,这个路径下就有你想要的so库文件了

Android Studio 简单制作so文件_第5张图片
1542275474199.jpg

拿去用就好了

你可能感兴趣的:(Android Studio 简单制作so文件)