標籤:
在Android的道路上越走越遠==,本著一顆童心去學習,沒想到最後會成為自己的職業。看到過知乎上寫的,並不是興趣使比爾蓋茨以及喬布斯他們成就斐然,而是他們真正的牛逼使得即使買大餅也能成為世界首富。然而如果沒有興趣他們也不會尋求這一條路,現如今自己缺少的不是興趣和激情,而是對代碼對程式的積累,也就是實力的差距,希望能夠通過一點一點的進步縮短實力的差距。程式員是需要不斷反覆思考積累的,僅僅寫在這裡對自己每天的學習有一個過程的瞭解。
學習之前不得不說的便是Android開發環境的搭載,在這裡,我們不僅僅需要Java較為靈活方便的介面開發技術,也需要C以及C++的高效簡潔。(其實本人更喜歡C,Java的確實大大方便了開發,然而寫多了感覺懶得寫C了,因為Java什麼都幾乎封裝好了,而C在研究演算法和底層中比起Java更為清晰高效)。或許只是對C的鐘情,也或許是對效率的考慮,這裡我們也希望搭載C和C++的介面,來對Java進行一個相輔相成的作用。利用Java的JNI便可以實現這種方式。
OK,接下來我們來搭載JDK,SDK,NDK,Eclipse的開發環境。
1. JDK的搭建
Java Develope Kit的環境搭載是所有Java相關開發的基礎,這裡我們選擇1.7版本的(官網上有1.8版本的可自行下載)。
系統內容的配置(可參考http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html)
這個網上有許多的例子可以查看,具體就是在系統屬性裡面修改環境變數。
1.1 建立環境變數JAVA_HOME,變數值填寫jdk的安裝目錄(本人是 D:\Java\jdk1.7.0)
1.2 編輯Path環境變數的值,增加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
1.3 編輯ClassPath環境變數的值,增加.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
1.4 環境搭載測試,在CMD下輸入Java -version以及Javac -version,查看輸出是否正確。若正確則JDK環境搭載成功。
2. SDK的搭建
首先SDK可以去官網上下載,鑒於天朝的有為,可以選擇FQ也可以用一些鏡像網站下載,這裡推薦一個網站(http://wear.techbrood.com/)裡面有非常多的android資源也包括下面介紹的ADT的下載。
由於在開發中經常需要在命令列中輸入一些常用的命令,比如adb的許多命令等等,所以也有必要將這些命令所在的目錄寫進Path中,以方便程式的調試。
2.1 建立環境變數SDK_HOME,將SDK的目錄填寫入
2.2 編輯Path環境變數的值,增加%SDK_HOME%\platform;%SDK_HOME%\platform-tools;
2.4 環境搭載測試,在CMD下輸入adb,查看輸出是否正確。若正確則JDK環境搭載成功。
3. NDK的搭建
和上面JDK以及SDK差不多==,理解就好~~~
4. Eclipse的環境搭建
這是所有環境的結局樓,如果上述JDK和SDK以及NDK均OK了,那麼進入這一步,將所有的工具路徑完善到Eclipse中。
5. JNI的檢查是本次的重點介紹
5.1 Android的項目建立
首先建立一個Android的項目
5.2 然後再Android的工程上右鍵點擊Android Tools->Add Native Support並給.so檔案取個名字。這時候工程就會多一個jni的檔案夾,jni下有Android.mk和XXX.cpp檔案。Android.mk是NDK工程的Makefile,XXX.cpp就是NDK的源檔案。
JNI介面的命名規範是:Java + 調用該方法的包名類名 + 方法名,對於執行個體方法,有兩個參數是必要的,一個JNI的環境指標JNIEnv *,另一個是調用該方法的Java執行個體jobject
#include <jni.h>#include <string.h>extern "C"_jstring* Java_com_cgf_helloworldndk_MainActivity_jniTest(JNIEnv* env,jobject thiz){ return (env)->NewStringUTF("hello from jni by ndkTest!");}
5.3 載入XXX庫
使用ndk庫必須在static代碼塊裡面用System.loadLaibrary載入.so庫
public class MainActivity extends Activity { static { System.loadLibrary("my-ndk"); } // 聲明JNI層的原生方法,使用native關鍵字 public native String stringFromJNI(); private TextView textView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(jniTest());
}
}
5.4 遇到Unable to launch cygpath. Is Cygwin on the path?錯誤,解決辦法如下:
5.4.1 工程右鍵,點Properties->C/C++ Build的Building Settings中去掉Use default build command,然後輸入${NDKROOT}/ndk-build.cmd
5.4.2 在C/C++ Build中點擊Environment,點Add...添加環境變數NDKROOT,值為NDK的根目錄
嘗試一下吧,在View內會看到所寫的C代碼已經被成功調用了。
終於完成了,雖然簡單,但是一步一步下來,不要犯錯也很重要的,去搭建自己的開發環境吧~~~(困死的程式員,據說要在Linux下進行開發,還是有點小慌的,加油以及睡覺)
Android的學習之路一