Android加密(一)

        为了增加apk反编译难度,逐渐学习android加密的相关知识,这里做一个整理.

        将Android里面一些常用如url,还有ssl证书等可以放入so.这个就涉及到ndk.下面以Mac 版android studio 为例进行操作.

        网上别人写的都很好,我这里主要讲下自己的操作情况和遇到的坑.

1.配置ndk开发路径,如果没有去download,在android studio 中找到sdk路径的目录,最下面那个就是ndk的路径

2.如下图建立一个类,loadLibrary里面是想要生成的so的名字

Android加密(一)_第1张图片

3.建立好之后,Build --> Make Project,找到build生成的对应class文件记住目录


Android加密(一)_第2张图片

4.打开as自带的命令行:

(1.)cd app/src/main

(2).javah -d jni -classpath (你的class的绝对路径)

以我为例子:

javah -d jni -classpath /Users/tusm/xxx....此处省略..xxx/app/intermediates/classes/debug com.xxxxx此处省略.NativeUtils

5.确定之后会在main下面生成一个jni目录,点进去发现多了一个.h文件,我们建立一个.c的文件.c里面代码如下

#include "com_xx_xx_xx_NativeUtils.h"

JNIEXPORT jstring JNICALL Java_com_xx_xx_xx__NativeUtils_getStringFromNative

(JNIEnv *env, jobject obj) {

return (*env)->NewStringUTF(env,"啦啦啦");

}

(1)注意这里 include 后面的名字为你生成的.h文件的全名 包括后缀

(2)下面的方法名和.h里面的方法名要一直

(3)啦啦啦那行是自己写的代码

6.配置项目的gradle.properties,在最后复制上下面几句话

android.useDeprecatedNdk=true

如果是3.0 注释掉上面那句话,复制粘贴android.deprecatedNdkCompileLease=1522807211997

(此处稍微注意下,后面那串数字可能每个用户都不一样,如果你是3.0的话,你可以先用上面的那个,然后编译,这时候会有log,你把对应的数字替换我上面那句话的1522807211997就可以)

7.打开app下对应的build.gradle。

在defaultConfig节点下添加

ndk {

          moduleName "zbx"        //生成的so名字

           abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。

       }

重新rebuild

7.编译好了之后,会在app/intermediates/ndk下面 生成几个so文件,怎么使用so,这个自己去了解,大功告成

你可能感兴趣的:(Android加密(一))