1. 程式人生 > >NDK的Linux的環境搭建(Eclipse篇)

NDK的Linux的環境搭建(Eclipse篇)

 一、NDK產生的背景

  Android平臺從誕生起,就已經支援C、C++開發。眾所周知,Android的SDK基於Java實現,這意味著基於Android SDK進行開發的第三方應用都必須使用Java語言。但這並不等同於“第三方應用只能使用Java”。在Android SDK首次釋出時,Google就宣稱其虛擬機器Dalvik支援JNI程式設計方式,也就是第三方應用完全可以通過JNI呼叫自己的C動態庫,即在Android平臺上,“Java+C”的程式設計方式是一直都可以實現的。

  不過,Google也表示,使用原生SDK程式設計相比Dalvik虛擬機器也有一些劣勢,Android SDK文件裡,找不到任何JNI方面的幫助。即使第三方應用開發者使用JNI完成了自己的C動態連結庫(so)開發,但是so如何和應用程式一起打包成apk併發布?這裡面也存在技術障礙。比如程式更加複雜,相容性難以保障,無法訪問Framework API,Debug難度更大等。開發者需要自行斟酌使用。

  於是NDK就應運而生了。NDK全稱是Native Development Kit。

  NDK的釋出,使“Java+C”的開發方式終於轉正,成為官方支援的開發方式。NDK將是Android平臺支援C開發的開端。

二、為什麼使用NDK

  1.程式碼的保護。由於apk的java層程式碼很容易被反編譯,而C/C++庫反匯難度較大。

  2.可以方便地使用現存的開源庫。大部分現存的開源庫都是用C/C++程式碼編寫的。

  3.提高程式的執行效率。將要求高效能的應用邏輯使用C開發,從而提高應用程式的執行效率。

  4.便於移植。用C/C++寫得庫可以方便在其他的嵌入式平臺上再次使用。

三、NDK簡介

       1.NDK是一系列工具的集合

       NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。

NDK集成了交叉編譯器,並提供了相應的mk檔案隔離CPU、平臺、ABI等差異,開發人員只需要簡單修改mk檔案(指出“哪些檔案需要編譯”、“編譯特性要求”等),就可以創建出so。

NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。

       2.NDK提供了一份穩定、功能有限的API標頭檔案宣告

       Google明確宣告該API是穩定的,在後續所有版本中都穩定支援當前釋出的API。從該版本的NDK中看出,這些API支援的功能非常有限,包含有:C標準庫(libc)、標準數學庫(libm)、壓縮庫(libz)、Log庫(liblog)。

四、NDK開發環境的搭建

1.下載安裝Android NDK

2.下載安裝cygwin

  由於NDK編譯程式碼時必須要用到make和gcc,所以你必須先搭建一個linux環境, cygwin是一個在windows平臺上執行的unix模擬環境,它對於學習unix/linux操作環境,或者從unix到windows的應用程式移植,非常有用。通過它,你就可以在不安裝linux的情況下使用NDK來編譯C、C++程式碼了。下載地址:http://www.cygwin.com

  1)然後雙擊執行吧,執行後你將看到安裝嚮導介面。

  2)點選下一步,此時讓你選擇安裝方式:

  • Install from Internet:直接從Internet上下載並立即安裝(安裝完成後,下載好的安裝檔案並不會被刪除,而是仍然被保留,以便下次再安裝)。
  • Download Without Installing:只是將安裝檔案下載到本地,但暫時不安裝。
  • Install from Local Directory:不下載安裝檔案,直接從本地某個含有安裝檔案的目錄進行安裝。

  3)選擇第一項,然後點選下一步。

  4)選擇要安裝的目錄,注意,最好不要放到有中文和空格的目錄裡,似乎會造成安裝出問題,其它選項不用變,之後點下一步:

  5)上一步是選擇安裝cygwin的目錄,這個是選擇你下載的安裝包所在的目錄,預設是你執行setup.exe的目錄,直接點下一步就可以:

  6)此時你共有三種連線方式選擇:

  • Direct Connection:直接連線。
  • Use IE5 Settings:使用IE的連線引數設定進行連線。
  • Use HTTP/FTP Proxy:使用HTTP或FTP代理伺服器進行連線(需要輸入伺服器地址、埠號)。

  使用者可根據自己的網路連線的實情情況進行選擇,一般正常情況下,均選擇第一種,也就是直接連線方式。然後再點選“下一步”。

  7)這是選擇要下載的站點,選擇後點下一步。

  8)此時會下載載入安裝包列表

  9)Search是可以輸入你要下載的包的名稱,能夠快速篩選出你要下載的包。那四個單選按鈕是選擇下邊樹的樣式,預設就行,不用動。View預設是Category,建議改成full顯示全部包再查,省的一些包被隱藏掉。左下角那個複選框是是否隱藏過期包,預設打鉤,不用管它就行,下邊開始下載我們要安裝的包吧,為了避免全部下載,這裡列出了後面開發NDK用得著的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc- g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12個包

  10)然後開始選擇安裝這些包吧,點skip,把它變成數字版本格式,要確保Bin項變成叉號,而Src項是原始碼,這個就沒必要選了。

  11)下面測試一下cygwin是不是已經安裝好了。

      執行cygwin,在彈出的命令列視窗輸入:cygcheck -c cygwin命令,會打印出當前cygwin的版本和執行狀 態,如果status是ok的話,則cygwin執行正常。

      然後依次輸入gcc –version,g++ --version,make –version,gdb –version進行測試,如果都打印出版本資訊和一些描述資訊,則cygwin安裝成功!

3.配置 NDK 環境變數

  a.首先找到 cygwin 的安裝目錄,找到一個 home\< 你的使用者名稱 >\.bash_profile 檔案,我的是:E:\cygwin\home\Administrator\.bash_profile , ( 注意:我安裝的時候我的 home 資料夾下面什麼都沒有,解決 的辦法:首先開啟環境變數,把裡面的使用者變數中的 HOME 變數刪掉,在 E:\cygwin\home 資料夾下建立名為Administrator 的資料夾(是使用者名稱),然後把 E:\cygwin\etc\skel\.bash_profile 拷貝到該資料夾下 ) 。

  b.開啟 bash_profile 檔案,新增 NDK=/cygdrive/< 你的碟符 >/<android ndk 目錄 > 例如:

      NDK=/cygdrive/e/android-ndk-r5

      export NDK

  NDK 這個名字是隨便取的,為了方面以後使用方便,選個簡短的名字,然後儲存

  c.開啟 cygwin ,輸入 cd $NDK ,如果輸出上面配置的 /cygdrive/e/android-ndk-r5 資訊,則表明環境變數設定成功了。

4.用 NDK 來編譯程式   

  a.現在我們用安裝好的 NDK 來編譯一個簡單的程式吧,我們選擇 ndk 自帶的例子 hello-jni ,我的位於E:\android-ndk-r5\samples\hello-jni( 根據你具體的安裝位置而定 ) ,

  b.執行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,進入到 E:\android-ndk-r5\samples\hello-jni 目錄。

  c.輸入 $NDK/ndk-build ,執行成功後,它會自動生成一個 libs 目錄,把編譯生成的 .so 檔案放在裡面。 ($NDK是呼叫我們之前配置好的環境變數, ndk-build 是呼叫 ndk 的編譯程式 )

  d.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 檔案,如果有,你的 ndk 就執行正常啦!

5.在 eclipse 中整合 c/c++ 開發環境

  a.裝 Eclipse 的 C/C++ 環境外掛: CDT ,這裡選擇線上安裝。  首先登入 http://www.eclipse.org/cdt/downloads.php ,找到對應你 Eclipse 版本的 CDT 外掛 的線上安裝地址。

  b.然後點 Help 選單,找到 Install New Software 選單

  c.點選 Add 按鈕,把取的地址填進去,出來外掛列表後,選 Select All ,然後選擇下一步即可完成安裝。

  d.安裝完成後,在 eclispe 中右擊新建一個專案,如果出現了 c/c++ 專案,則表明你的 CDT 外掛安裝成功啦!

6.配置 C/C++ 的編譯器

  a.開啟 eclipse ,匯入ndk 自帶的hello-jni 例子,右鍵單擊專案名稱,點選 Properties ,彈出配置介面,之後再點選 Builders ,彈出專案的編譯工具列表,之後點選 New,新新增一個編譯器,點選後出現新增介面,選擇 Program ,點選 OK。

  b.出現了新增介面,首先給編譯配置起個名字,如: C_Builder,設定 Location 為 < 你 cygwin 安裝路徑 >\bin\bash.exe 程式,例:E:\cygwin\bin\bash.exe ,設定Working Directory為<你 cygwin 安裝路徑 >\bin 目錄,例如: E:\cygwin\bin,設定 Arguments 為 --login -c "cd /cygdrive/e/android-ndk-r5/samples/hello-jni && $NDK /ndk-build"

  上面的配置中 /cygdrive/e/android-ndk-r5/samples/hello-jni 是你當前要編譯的程式的目錄, $NDK 是之前配置  的 ndk 的環境變數,這兩個根據你具體的安裝目錄進行配置,其他的不用變, Arguments 這串引數實際是  給 bash.exe 命令列程式傳引數,進入要編譯的程式目錄,然後執行 ndk-build 編譯程式

  c.接著切換到 Refresh 選項卡,給 Refresh resources upon completion 打上鉤

  d.然後切換到 Build Options 選項卡,勾選上最後三項

  e.之後點選 Specify Resources 按鈕,選擇資源目錄,勾選你的專案目錄即可

  f.最後點選 Finish,點選 OK 一路把剛才的配置都儲存下來,注意:如果你配置的編譯器在其它編譯器下邊,記得一定要點 Up 按鈕,把它排到第一位,否則 C 程式碼的編譯晚於Java程式碼的編譯,會造成你的 C 程式碼要編譯兩次才能看到最新的修改。

  g.編譯配置也配置完成啦,現在來測試一下是否可以自動編譯呢,開啟專案 jni 目錄裡的 hello-jni.c 檔案把提示 Hello from JNI! 改成其他的文字:如: Hello , My name is alex. ,然後再模 擬器中執行你的程式,如果模擬器中顯示了你最新修改的文字,那麼 Congratulations !你已經全部配置成功啦!

五、開發自己的NDK程式

  入門的最好辦法就是學習Android自帶的例子, 這裡就通過學習Android的NDK自帶的demo程式:hello-jni來達到這個目的。

1、 開發環境的搭建

  1)android的NDK開發需要在linux下進行: 因為需要把C/C++編寫的程式碼生成能在arm上執行的.so檔案,這就需要用到交叉編譯環境,而交叉編譯需要在linux系統下才能完成。

  2)安裝android-ndk開發包,這個開發包可以在google android 官網下載: 通過這個開發包的工具才能將android jni 的C/C++的程式碼編譯成庫

  3)android應用程式開發環境: 包括eclipse、java、 android sdk、 adt等。

  如何下載和安裝android-ndk我這裡就不囉嗦了,安裝完之後,需要將android-ndk的路勁加到環境變數PATH中:

    sudo gedit /etc/environment

  在environment的PATH環境變數中新增你的android-ndk的安裝路勁,然後再讓這個更改的環境變數立即生效:

     source  /etc/environment

  經過了上述步驟,在命令列下敲:

    ndk-bulid

  彈出如下的錯誤,而不是說ndk-build not found,就說明ndk環境已經安裝成功了。

    Android NDK: Could not find application project directory !    
    Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    
    /home/braincol/workspace/android/android-ndk-r5/build/core/build-local.mk:85: *** Android NDK: Aborting    .  Stop.

 2.程式碼的編寫

  1)首先是寫java程式碼

  建立一個Android應用工程HelloJni,建立HelloJni.java檔案:

  HelloJni.java :

複製程式碼
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;

public class HelloJni extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }


    /* A native method that is implemented by the 'hello-jni' native library, which is packaged with this application. */
    public native String  stringFromJNI();

    public native String  unimplementedStringFromJNI();



    /* this is used to load the 'hello-jni' library on application startup. The library has already been unpacked into

      /data/data/com.example.HelloJni/lib/libhello-jni.so at installation time by the package manager. */
    static {
        System.loadLibrary("hello-jni");
    }
}
複製程式碼

  這段程式碼很簡單,註釋也很清晰,這裡只提兩點::

static{ System.loadLibrary("hello-jni"); }

  表明程式開始執行的時候會載入hello-jni, static區宣告的程式碼會先於onCreate方法執行。如果你的程式中有多個類,而且如果HelloJni這個類不是你應用程式的入口,那麼hello-jni(完整的名字是libhello-jni.so)這個庫會在第一次使用HelloJni這個類的時候載入。

public native String stringFromJNI(); public native String unimplementedStringFromJNI();

  可以看到這兩個方法的宣告中有 native 關鍵字, 這個關鍵字表示這兩個方法是本地方法,也就是說這兩個方法是通過原生代碼(C/C++)實現的,在java程式碼中僅僅是宣告。

  用eclipse編譯該工程,生成相應的.class檔案,這步必須在下一步之前完成,因為生成.h檔案需要用到相應的.class檔案。

2)編寫相應的C/C++程式碼

  剛開始學的時候,有個問題會讓人很困惑,相應的C/C++程式碼如何編寫,函式名如何定義? 這裡講一個方法,利用javah這個工具生成相應的.h檔案,然後根據這個.h檔案編寫相應的C/C++程式碼。

  a. 生成相應.h檔案:

  就拿我這的環境來說,首先在終端下進入剛剛建立的HelloJni工程的目錄:

[email protected]:~$ cd workspace/android/NDK/hello-jni/

  ls檢視工程檔案  

[email protected]:~/workspace/android/NDK/hello-jni$ ls AndroidManifest.xml  assets  bin  default.properties  gen  res  src

  可以看到目前僅僅有幾個標準的android應用程式的檔案(夾)。

  首先我們在工程目錄下建立一個jni資料夾:

[email protected]:~/workspace/android/NDK/hello-jni$ mkdir jni [email protected]:~/workspace/android/NDK/hello-jni$ ls AndroidManifest.xml  assets  bin  default.properties  gen  jni  res  src

  下面就可以生成相應的.h檔案了:

[email protected]:~/workspace/android/NDK/hello-jni$ javah -classpath bin -d jni com.example.hellojni.HelloJni

  -classpath bin:表示類的路勁

  -d jni: 表示生成的標頭檔案存放的目錄

  com.example.hellojni.HelloJni 則是完整類名

  這一步的成功要建立在已經在 bin/com/example/hellojni/  目錄下生成了 HelloJni.class的基礎之上。現在可以看到jni目錄下多了個.h檔案:

[email protected]:~/workspace/android/NDK/hello-jni$ cd jni/ [email protected]:~/workspace/android/NDK/hello-jni/jni$ ls com_example_hellojni_HelloJni.h

  我們來看看com_example_hellojni_HelloJni.h的內容:

  com_example_hellojni_HelloJni.h :

複製程式碼
/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class com_example_hellojni_HelloJni */

#ifndef _Included_com_example_hellojni_HelloJni

#define _Included_com_example_hellojni_HelloJni

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     com_example_hellojni_HelloJni

 * Method:    stringFromJNI

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI

  (JNIEnv *, jobject);


/*

 * Class:     com_example_hellojni_HelloJni

 * Method:    unimplementedStringFromJNI

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_unimplementedStringFromJNI

  (JNIEnv *, jobject);


#ifdef __cplusplus

}

#endif

#endif
複製程式碼

  上面程式碼中的JNIEXPORT 和 JNICALL 是jni的巨集,在android的jni中不需要,當然寫上去也不會有錯。從上面的原始碼中可以看出這個函式名那是相當的長啊。。。。 不過還是很有規律的, 完全按照:java_pacakege_class_mathod 形式來命名。

  也就是說:

  Hello.java中 stringFromJNI() 方法對應於 C/C++中的 Java_com_example_hellojni_HelloJni_stringFromJNI() 方法

  HelloJni.java中的 unimplementedStringFromJNI() 方法對應於 C/C++中的 Java_com_example_hellojni_HelloJni_unimplementedStringFromJNI() 方法 

  注意下其中的註釋:

  Signature: ()Ljava/lang/String; 

  ()Ljava/lang/String;()表示函式的引數為空(這裡為空是指除了JNIEnv *, jobject 這兩個引數之外沒有其他引數,JNIEnv*, jobject是所有jni函式必有的兩個引數,分別表示jni環境和對應的java類(或物件)本身),Ljava/lang/String; 表示函式的返回值是java的String物件。

b. 編寫相應的.c檔案:

  hello-jni.c :

複製程式碼
#include <string.h>
#include <jni.h>


/* This is a trivial JNI example where we use a native method

 * to return a new VM String. See the corresponding Java source

 * file located at:

 *   apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java

 */

jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}
複製程式碼

  這裡只是實現了Java_com_example_hellojni_HelloJni_stringFromJNI方法,而 Java_com_example_hellojni_HelloJni_unimplementedStringFromJNI 方法並沒有實現,因為在HelloJni.java中只調用了stringFromJNI()方法,所以unimplementedStringFromJNI()方法沒有實現也沒關係,不過建議最好還是把所有java中定義的本地方法都實現了,寫個空函式也行啊。。。有總比沒有好。

  Java_com_example_hellojni_HelloJni_stringFromJNI() 函式只是簡單的返回了一個內容為 "Hello from JNI !" 的jstring物件(對應於java中的String物件)。hello-jni.c檔案已經編寫好了,現在可以把com_example_hellojni_HelloJni.h檔案給刪了,當然留著也行,只是我還是習慣把不需要的檔案給清理乾淨了。

3)編譯hello-jni.c 生成相應的庫

a 編寫Android.mk檔案

  在jni目錄下(即hello-jni.c 同級目錄下)新建一個Android.mk檔案,Android.mk 檔案是Android 的 makefile檔案,內容如下:

複製程式碼
# Copyright (C) 2009 The Android Open Source Project

#

# Licensed under the Apache License, Version 2.0 (the "License");

# you may not use this file except in compliance with the License.

# You may obtain a copy of the License at

#

#      http://www.apache.org/licenses/LICENSE-2.0
#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

# See the License for the specific language governing permissions and

# limitations under the License.

#

LOCAL_PATH := $(call my-dir)



include $(CLEAR_VARS)



LOCAL_MODULE    := hello-jni

LOCAL_SRC_FILES := hello-jni.c



include $(BUILD_SHARED_LIBRARY)
複製程式碼

  這個Androd.mk檔案很短,下面我們來逐行解釋下:

    LOCAL_PATH := $(call my-dir)

  一個Android.mk 檔案首先必須定義好LOCAL_PATH變數。它用於在開發樹中查詢原始檔。在這個例子中,巨集函式’my-dir’, 由編譯系統提供,用於返回當前路徑(即包含Android.mk file檔案的目錄)。

    include $( CLEAR_VARS)

  CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除許多LOCAL_XXX變數(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...), 除LOCAL_PATH 。這是必要的,因為所有的編譯控制檔案都在同一個GNU MAKE執行環境中,所有的變數都是全域性的。

    LOCAL_MODULE := hello-jni

  編譯的目標物件,LOCAL_MODULE變數必須定義,以標識你在Android.mk檔案中描述的每個模組。名稱必須是唯一的,而且不包含任何空格。

注意:編譯系統會自動產生合適的字首和字尾,換句話說,一個被命名為'hello-jni'的共享庫模組,將會生成'libhello-jni.so'檔案。

  重要注意事項:如果你把庫命名為‘libhello-jni’,編譯系統將不會新增任何的lib字首,也會生成 'libhello-jni.so',這是為了支援來源於Android平臺的原始碼的Android.mk檔案,如果你確實需要這麼做的話。

    LOCAL_SRC_FILES := hello-jni.c

  LOCAL_SRC_FILES變數必須包含將要編譯打包進模組中的C或C++原始碼檔案。注意,你不用在這裡列出標頭檔案和包含檔案,因為編譯系統將會自動為你找出依賴型的檔案;僅僅列出直接傳遞給編譯器的原始碼檔案就好。

  注意,預設的C++原始碼檔案的副檔名是’.cpp’. 指定一個不同的副檔名也是可能的,只要定義LOCAL_DEFAULT_CPP_EXTENSION變數,不要忘記開始的小圓點(也就是’.cxx’,而不是’cxx’)

    include $(BUILD_SHARED_LIBRARY)

  BUILD_SHARED_LIBRARY表示編譯生成共享庫,是編譯系統提供的變數,指向一個GNU Makefile指令碼,負責收集自從上次呼叫'include $(CLEAR_VARS)'以來,定義在LOCAL_XXX變數中的所有資訊,並且決定編譯什麼,如何正確地去做。還有 BUILD_STATIC_LIBRARY變量表示生成靜態庫:lib$(LOCAL_MODULE).a, BUILD_EXECUTABLE 表示生成可執行檔案。

b. 生成.so共享庫檔案

  Andro檔案已經編寫好了,現在可以用android NDK開發包中的 ndk-build指令碼生成對應的.so共享庫了,方法如下:

    [email protected]:~/workspace/android/NDK/hello-jni/jni$ cd .. 
    [email protected]:~/workspace/android/NDK/hello-jni$ ls 
    AndroidManifest.xml  assets  bin  default.properties  gen  jni  libs  obj  res  src 
    [email protected]:~/workspace/android/NDK/hello-jni$ ndk-build 
    Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver 
    Gdbsetup       : libs/armeabi/gdb.setup 
    Install        : libhello-jni.so => libs/armeabi/libhello-jni.so 

  可以看到已經正確的生成了libhello-jni.so共享庫了, 我們去 libs/armeabi/ 目錄下看看:

    [email protected]:~/workspace/android/NDK/hello-jni$ cd libs/ 
    [email protected]:~/workspace/android/NDK/hello-jni/libs$ ls 
    armeabi 
    [email protected]:~/workspace/android/NDK/hello-jni/libs$ cd armeabi/ 
    [email protected]:~/workspace/android/NDK/hello-jni/libs/armeabi$ ls 
    gdbserver  gdb.setup  libhello-jni.so

4)在eclipse重新編譯HelloJni工程,生成apk

  eclipse中重新整理下HelloJni工程,重新編譯生成apk,libhello-jni.so共享庫會一起打包在apk檔案內。在模擬器中看看執行結果。

參考資料:

http://blog.csdn.net/hhao137/article/details/4304664

http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html

http://yueguc.iteye.com/blog/946724

http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html

相關推薦

NDK的Linux的環境搭建(Eclipse)

 一、NDK產生的背景   Android平臺從誕生起,就已經支援C、C++開發。眾所周知,Android的SDK基於Java實現,這意味著基於Android SDK進行開發的第三方應用都必須使用Java語言。但這並不等同於“第三方應用只能使用Java”。在Android SDK首次釋出時,Google就宣

Web開發環境搭建 Eclipse-Java EE

選擇 進入 XP glass The 代碼 ans download 圖片 Web開發環境搭建 Eclipse-Java EE 篇 【原創內容,轉載註名出處】 1. 下載和安裝 1.1 下載JDK 在Java官方網站下載最新版本的 Java SE: http://www.

docker簡易環境搭建實戰:以人人網開源專案(renren-fast)搭建分散式部署(後端

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast)搭建分散式部署(後端篇) 寫在前面:注:閱讀本文前,請先閱讀docker標籤的docker簡易系列的文章。 後端最終實現的架構圖: 第一步 簡單瞭解人人開源專案renren-fast 官網:h

docker簡易環境搭建實戰:以人人網開源專案(renren-fast-vue)搭建分散式部署(前端

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast-vue)搭建分散式部署(前端篇) 寫在前面:注:閱讀本文前,請先閱讀docker標籤的docker簡易系列的文章。 前端最終實現的架構圖: 第一步 修改前端專案配置 修改專案目錄中 static/co

JSP環境搭建 Eclipse

首先需要把Java 和 Tomcat 伺服器下載。下載並安裝完成後,接下來是Eclipse的設定。 首次啟動 Eclipse 需要配置執行環境 Tomcat伺服器根據自己下載的版本配置好。 建立JSP專案 建立Web伺服器 選擇 Fi

Linux實戰50臺伺服器規模叢集模式之環境搭建準備(綜合網路整理)

一、搭建叢集1、採購伺服器、效能測試、不同叢集用什麼配置。2、採購雲服務(雲主機、虛擬機器)。3、採購頻寬、壓力測試。4、採購CDN服務。二、大致架構圖三、規劃1、伺服器規劃伺服器數量作用負載均衡2對訪問網站的流量進行分流,減少流量對某臺伺服器的壓力Web2處理使用者頁面訪問

初學C++環境搭建(Eclipse+CDT+MinGW)

Eclipse除了可以開發Java之外,還支援了許多語言,當然絕不會漏了 C/C++,現在就來看看如何利用 Eclipse 進行C/C++程式的開發。要使用 Eclipse 開發c/c++ 程式最主要的幾個步驟: 1. 安裝 JRE由於 Eclipse 本身是用 Java

android 開發環境搭建 eclipse支援,解決dl-ssl.google.com資源下載不動問題

作業系統:centos7 。不過有幾個步驟是通用的實用的。極力推薦一個,志在為國內開發者提供快速以用的android開發環境。 目錄 一:Centos上安裝eclipse(安裝在目錄/opt/ 下) 二:安裝androidSDK(android-sdk_r24.3.2-l

微信公眾號開發環境搭建拓展(Git)

        上一篇講到了新浪雲應用,現在我們來講講裡面的一些好用好玩的東西。         博主會以實踐中的過程來講,目的為了使博主自己對這些有趣的東西加深映象;這也是小白級別的,所以各路大神請

Golang開發環境搭建-Vim

雖說sublimetext3+gosublime+gocode是目前較為 流行的Golang開發環境組合,但作為一名VIMer,沒有一套得心應手的Vim for Golang dev心裡總是過不去的。Golang雖然年輕,但即便是從Go 1版本釋出(2012年3

go環境搭建-eclipse

http://studygolang.com/articles/8300 http://www.cnblogs.com/kungfupanda/p/5570324.html http://subclipse.tigris.org/servlets/ProjectDocume

安卓環境搭建(Eclipse+ADT+SDK)64bit

第一步:搭建JDK環境(JDK8)     JDK安裝(jdk集成了jre)     jdk是Java的開發工具,Jre是Java執行環境     檢視是否執行成功     在cmd執行視窗  java -version         配置環境變數     JAV

buildbot環境搭建—master

apk slc ace install jdi rpe 冗余 support 說明 好久沒寫博客來,最近沒有深入研究東西,所以寫不出什麽特別有技術含量的東西,但是,每周出產博客的習慣不能荒廢掉,所以就寫一下,這個星期學習的簡單到東西。 關於buildbot,它是基於pyt

android開發環境搭建(Eclipse版)

按道理,現在android的不少開發環境應該已經遷移到Android Studio了,但是還是有不少開發者使用eclipse,原因估計是demo更多,遇到問題更容易找到,等等吧,不過等到Android Studio 2.0的出現,估計大部分開發者要遷移過去了,所

Hive UDF 環境搭建(Eclipse+Maven)

安裝Maven (https://blog.csdn.net/rav009/article/details/79469303) 安裝Eclipse 安裝Eclipse的Maven外掛 m2e 使用Eclipse建立Maven專案 Group ID一般是org.you

Mac os x環境配置 Android ndk 開發環境eclipse

1.請確保安卓環境已經存在 3. 配置 .bash_profile 開啟終端,輸入命令 pico .bash_profile 首先 export PATH=${PATH}:/Users/Malone/Documents/android-ndk-r13b

cocos2d-x(vs2012)環境搭建(第一)[版本:cocos2d-x-3.1.1]

1.下載資源 2.安裝環境 按"下一步的方式"安裝vs2012和python,安裝完成後,把python的要目錄加到環境變數在中. 把cocos2d-x包解壓到自己要放的裡放,把"[cocos2d-x root]\tools\cocos2d-console\bin\

Eclipse和PyDev搭建完美Python開發環境(Windows

安裝Python 從網站上下載最新的版本,從http://python.org/download/下載。安裝過程與其他Windows軟體類似。這裡使用python2.7.6 在Windows命令列中使用Python 如果你想要從Windows命令列呼叫Python,那麼需要

windows下golang開發環境搭建Eclipse

1.go語言環境安裝 下載地址:https://golang.org/dl/ 找windows下面的msi檔案下載安裝即可。注意位數喲~ 安裝完這個你就可以在命令列下面執行go程式啦:go run test.go package main import ( "fmt" ) fu

arm+linux裸機環境搭建之jlink+eclipse+arm-linux-gdb線上裸調(完結

本文用到的jlink外掛在這裡 兩個先決條件: 1、已經成功安裝eclipse,考慮到版本相容問題,不適用redhat6自帶的eclipse。如何安裝,之前的博文已有提及,不再贅述; 2、已經成功,安裝arm-linux-gdb除錯工具,之前的博文也已經安裝完成。 接下