因爲Android應用被反編譯後是能夠看到裏面信息的,而一些敏感信息,好比服務器的ip地址、加密的算法,咱們是不但願讓別人知道的。如何才能隱藏這些信息呢,就我目前瞭解,使用Android NDK,把這些數據編譯在so文件中,而後經過JNI獲取,從而達到保護敏感信息的目的。
因而最近幾天開始學習Android NDK開發,網上有不少教程,但都太麻煩,一會配置這,一會配置那的,很容易讓像我望而卻步。
在成功運行Hello JNI後,心想幹脆寫個博客吧,把本身的遇到的問題記錄下來,若是可以幫助一樣對Android NDK感興趣的童鞋,那就最好不過了。
首先下載相關工具:
1.下載最新版的Android developer tools
這個也叫ADT,是google最近發佈的一款Android集成開發工具,解壓後有2個目錄:eclipse和sdk.eclipse目錄裏是一個定製的eclipse,已經裝好了sdk插件 、ndk插件和c/c (CDT)等插件,不到400M,sdk目錄裏面是一個最新API級別的android sdk。建議下載這個ADT。若是你以前已經下載過各個版本的SDK,把它們拷過來,還能夠正常使用。
若是你不肯意下載,那麼你就須要在你的eclipse中安裝C/C (CDT)和NDK插件。
2.下載Android NDK,400多M
3.今天(2013年4月13日12:09:47),我在windows環境下測試了一下,發現不用安裝Cygwin也是能夠成功運行的。
下面開始建立項目:
1.新建一個Android Project
2.右鍵 找到Android Tools選擇,點擊Add Native Support
html
輸入so庫文件的名字,若是你使用過百度地圖的話,你對這個so文件應該不陌生,它位於項目libs目錄裏面的armeabi文件夾中,通常爲libxxxx.so,我這裏輸入是AppConfig,編譯成功後便會生成libAppConfig.so文件,點擊肯定,eclipse會變成C/C 編輯視圖,ndk插件會幫你在項目下建立一個jni目錄,而且在jni下面建立AppConfig.cpp文件和一個Android.mk文件
Android.mk 裏面內容以下 java
1 2 3 4 5 |
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := AppConfig LOCAL_SRC_FILES := AppConfig.cpp include $(BUILD_SHARED_LIBRARY) |
而AppConfig.cpp裏面只有一行代碼:#include android
接下來網上不少教程都是用javah生成.h頭文件。
我是按照下面的流程來作的:
1.編寫一個java類,裏面有一個getAppUrl()的native方法,由於我要隱藏服務器的地址,因此這裏須要返回一個String字符串 算法
1 2 3 4 5 6 7 8 9 10 |
public class JNIInterface{ static{ //加載libAppConfig.so庫文件 //AppConfig是添加 Android Native Support時輸入的名稱 //另外,經過修改Android.mk中的LOCAL_MODULE能夠修改這個名稱 System.loadLibrary("AppConfig"); } public static native String getAppUrl(); } |
2.編寫AppConfig.cpp文件 windows
1 2 3 4 5 6 7 |
#include <jni.h> extern "C" jstring Java_com_loveplusplus_hellojni_JNIInterface_getAppUrl(JNIEnv* env,jobject thiz) { //return (*env)->NewStringUTF(env,"http://www.baidu.com"); //c return env->NewStringUTF("http://www.baidu.com"); } |
第一行代碼:引入jni.h頭文件
第二行代碼:由於這裏用的c ,因此要extern "C" C是大小的
第三行代碼:剛纔寫的JNIInterface類的getAppUrl方法位於com.loveplusplus.hellojni這個包下,因此這裏有一個固定的寫法:Java_包名_類名_方法名。這和其它教程裏面講的 使用javah 生成頭文件實際上是一回事。JNIEnv* env,jobject thiz是固定傳入的參數。
第四行代碼:這行註釋掉的代碼是c語言返回字符串的寫法
第五行代碼:返回一個字符串
點擊上圖中紅圈中的那個錘子,ndk便會把AppConfig.cpp編譯到libAppConfig.so文件中
下面是運行效果圖:
本人剛剛學習Android NDK開發,但願各位大牛多多指教 服務器