????????為了增加apk反編譯難度,逐漸學(xué)習(xí)android加密的相關(guān)知識(shí),這里做一個(gè)整理.
????????將Android里面一些常用如url,還有ssl證書(shū)等可以放入so.這個(gè)就涉及到ndk.下面以Mac 版android studio 為例進(jìn)行操作.
? ? ? ? 網(wǎng)上別人寫(xiě)的都很好,我這里主要講下自己的操作情況和遇到的坑.
1.配置ndk開(kāi)發(fā)路徑,如果沒(méi)有去download,在android studio 中找到sdk路徑的目錄,最下面那個(gè)就是ndk的路徑
2.如下圖建立一個(gè)類,loadLibrary里面是想要生成的so的名字

3.建立好之后,Build --> Make Project,找到build生成的對(duì)應(yīng)class文件記住目錄

4.打開(kāi)as自帶的命令行:
(1.)cd app/src/main
(2).javah -d jni -classpath (你的class的絕對(duì)路徑)
以我為例子:
javah -d jni -classpath /Users/tusm/xxx....此處省略..xxx/app/intermediates/classes/debug com.xxxxx此處省略.NativeUtils
5.確定之后會(huì)在main下面生成一個(gè)jni目錄,點(diǎn)進(jìn)去發(fā)現(xiàn)多了一個(gè).h文件,我們建立一個(gè).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)啦啦啦那行是自己寫(xiě)的代碼
6.配置項(xiàng)目的gradle.properties,在最后復(fù)制上下面幾句話
android.useDeprecatedNdk=true
如果是3.0 注釋掉上面那句話,復(fù)制粘貼android.deprecatedNdkCompileLease=1522807211997
(此處稍微注意下,后面那串?dāng)?shù)字可能每個(gè)用戶都不一樣,如果你是3.0的話,你可以先用上面的那個(gè),然后編譯,這時(shí)候會(huì)有l(wèi)og,你把對(duì)應(yīng)的數(shù)字替換我上面那句話的1522807211997就可以)
7.打開(kāi)app下對(duì)應(yīng)的build.gradle。
在defaultConfig節(jié)點(diǎn)下添加
ndk {
? ? ? ? ? moduleName "zbx"? ? ? ? //生成的so名字
? ? ? ? ? ?abiFilters "armeabi", "armeabi-v7a", "x86"? //輸出指定三種abi體系結(jié)構(gòu)下的so庫(kù)。
? ? ? ?}
重新rebuild
7.編譯好了之后,會(huì)在app/intermediates/ndk下面 生成幾個(gè)so文件,怎么使用so,這個(gè)自己去了解,大功告成