Android平台搭建

來源:互聯網
上載者:User

                               

謹以此文紀念一個多月的努力。

     Android的應用平台與Linux的核心之間有那麼幾層,1.c++架構2.JAVA 架構。一個月前,突然發現Android下的錄音無法使用,不管是內建的程式還是網上下載的程式都無法使用,調試核心發現,參數傳遞錯誤,開始以為是Linux的核心出錯,使用Linux下的aplay可以錄音而錄音軟體不可以使用,使用錄音軟體時發現傳遞的stream為0,而不是1.所以開啟的裝置是playback而不是capture裝置,為了這一步就花了一個星期的時間去查看Linux的源碼。其後準備去看Linux kernel與應用程式間的互動,發現者中間還有opencore層。一堆的JAVA以及C++,憑我那淺陋的C語言是很難理解的。不得不放棄,然後瞭解到還有ndk這個東東,就動心了,因為Linux下的aplay是可以使用的,我把它做成一個so庫留給上層調用就行了。化了兩三天把eclipse sdk ndk 等等windows下的android
開發環境裝好後,就開始了ndk的的so庫之旅。功夫不負有心人,so庫的模型做好了,下面就等著填東西了。

     下面咱從android
開發環境安裝開始說吧。

1.   eclipse安裝

下一個eclipse-java-helios-SR1-win32.zip 解壓即可,不過這個東西需要安裝java開發環境,java安裝也很簡單下載一個jre-6u23-windows-i586.exe 以及jdk-6u23-windows-i586.exe點擊安裝就可以了。有時候在開啟eclipse時會提示一些錯誤,其實有可能是沒有jre檔案夾,copy
java安裝檔案下jdk檔案中jre檔案夾複製到eclipse的檔案夾下即可。

2.   sdk 安裝

下載一個android-sdk_r08-windows.zip解壓即可。一般情況下還需要將其路徑加入環境變數中,不加也可以。區別是如果加了,在eclipse中建立的android的虛擬器會放在該檔案夾下,名字為.android,如果不加的話,會在C:/Documents and Settings/使用者名稱 下,有些錯誤的原因就是使用者名稱為漢字。

3.   添加PATH

     我的電腦->屬性->進階->環境變數->建立

     變數名 JRE_HOME 變數值 C:/Program Files/Java/jre6

       變數名 JAVA_JRE_HOME變數值 C:/Program/Files/Java/jdk1.6.0_13/jre

       變數名 JAVA_HOME  變數值 C:/Program Files/Java/jdk1.6.0_23

變數名 CLASSPATH  

變數值

.;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar;%JRE_HOME%/lib;%JRE_HOME%/lib/rt.jar;%JAVA_JRE_HOME%/lib;%JAVA_JRE_HOME%/lib/rt.jar

變數名  Android_SDK_HOME 變數值D:/Android/source/android-sdk-windows

4.   eclipse中的安裝adt外掛程式

開啟eclipse後 help->install new software->add
 name任意,location中為 http://dl-ssl.google.com/android/eclipse,然後就一路next就ok了。安裝後在主介面上file->new->project中有Android選項就ok了。不過還需要配置sdk為位置,在windows->preferences中的android一項中點擊browse選擇sdk放置的位置就可以了。

5.   ndk安裝

下載cygwinsetup.zip
和android-ndk-r5-windows.zip注意了android-ndk-1.6_r1-windows.zip下沒有ndk-build,這個版本的我不知道怎麼編譯就換了一個高版本的。安裝cygwinsetup,一路next後選擇一個比較近的網站下載,在選擇下載安裝哪些軟體時,全部選擇Install就行了,反正時間不是太長(我下了一個晚上,嘿嘿!!)。然後就ok了,在案頭上會有一個cygwin的表徵圖,開啟後,類似一個終端。在這裡需要設定ndk的路徑,因為你以後會用很多次的。採用vi /etc/skel/.bashrc 在最後添加

NDK=/cygdrive/xxx/xxx

PATH=$PATH:$NDK

export NDK

退出,然後source /etc/skel/.bashrc 就可以了,你在命令列中輸入

$NDK 應該會開啟ndk所在的檔案夾

6.   adb安裝

下載一個adb壓縮檔,解壓,把裡面的兩個檔案copy到windows/system32下即可。在start->運行 cd c:/ windows/system32然後就可以使用adb 了。

7.   如何建立一個Android工程

建立一個android 的工程需要建立一個avd,主介面windws->Android
SDK and AVD Manager –>new.

Name :avdtest

Target :Android
2.1

SD Card :400
Mb

Creat avd後。會在主介面中羅列出可用的avd了。

8.   建立一個android
的工程

File->new->project->Android->Android
project 然後next,

Project name :隨意

Build Target  :選擇虛擬機器

Application name :隨意

下面的幾個那麼都隨意。注意Min sdk version 可以是1~9值,如果是Android
2.1的話,最高為7. Finish 就可以了。然後在主介面上點擊Run就可以運行了。

9.   Adb使用

1.   在進入system32後運行adb
shell 可以進入正在啟動並執行Android的系統終端。

2.   Adb push 向Android系統中寫入東西,一般第一次會提示Read-Only filesytem ,這就需要adb shell進入終端後,輸入

mount –o remount
/dev/block/mtdblock /system就可以了。

        如果出現out–memory

      則cmd中輸入 emulator –avd
avdname –partition-size  128,注意了,如果提示說沒有emulator的命令,則需要設定環境變數,上面偷懶了,下面就不行了。

3.   adb pull 可以將android系統內的東西輸出。

如adb pull /data/app/com.examples.apk  d:/android/apk

10. so庫的建立

1.   在剛才建立的工程下,建立一個folder,name 為jni,在jni下建立兩個檔案,一個是Android.mk,一個是hello.c。

2.   在Android.mk中輸入

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello

LOCAL_SRC_FILES := hello.c

LOCAL_LDLIBS := -ldl
-llog    #添加系統的so檔案

LOCAL_LDLIBS += -L./ -lasound    #添加本地的so檔案  -L為so庫的路徑,這個在調用別人的so庫,並且有標頭檔的情況下加快開發速度。

include $(BUILD_SHARED_LIBRARY)

3.   在hello.c中添加

 #include <string.h>

#include
<jni.h>

#include
<dlfcn.h>

#include
<android/log.h>

jint
Java_com_hello_hello_hello(JNIEnv* env,jobject this)

{

        return 12;

}

      注意:以上的函數命名為com.hello為包名即是建立android工程時,package
name,

        第二個hello為application name ,這個必須要和工程相互對於。第三個hello就是你打算在java中調用的函數名。修改src下的hello.java

            package com.hello;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

 

public class hello extends Activity {

    /**
Called when the activity is first created. */

   
@Override

    public
void onCreate(Bundle savedInstanceState) {

       
super.onCreate(savedInstanceState);

       
//setContentView(R.layout.main);

       

       
TextView  tv = new TextView(this);

       
tv.setText("hello 調用是否成功:" + hello());

        setContentView(tv);

    }

    public
native int  hello();

    static
{

       
System.loadLibrary("hello");

    }

}

   如果以上都沒有錯的話,點擊run就可以了,然後再android虛擬機器上會出現” hello 調用是否成功: 12”。Ok!有個小竅門,一般人不告訴他就是,沒有對檔案改動時,注意點擊refrresh,不行的話注意,點擊主介面上的project->clean

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.