[入門指導(dǎo)]簡述Android 應(yīng)用程序開發(fā)方法

原創(chuàng) 2015-06-23 10:10:00 [入門指導(dǎo)]簡述Android 應(yīng)用程序開發(fā)方法

簡述Android 應(yīng)用程序開發(fā)方法

隨著Android系統(tǒng)的普及,越來越多的學(xué)生,工程師開始步入了Android開發(fā)的行列。那么對于一個從來沒有接觸過Android開發(fā)的人,該從哪里入手,怎樣做出自己的第一個應(yīng)用程序呢?以下將以一個簡單的應(yīng)用程序--LED測試應(yīng)用程序來簡述Android應(yīng)用程序開發(fā)方法。
我這里要介紹的LED測試應(yīng)用程序名為TestKey,其軟件的實現(xiàn)是我們重點講述的,他符合Android應(yīng)用程序開發(fā)框架,有利于您對Android系統(tǒng)的學(xué)習(xí)。所用的系統(tǒng)是Ubuntu 12.04操作系統(tǒng),開發(fā)工具是ADT-Bundle。

一 軟件實現(xiàn)框架

TestKey 軟件實現(xiàn)Led控制的系統(tǒng)調(diào)用圖如下:



下面我們由下至上來說明每一層的功能:
Linux kernel層:
由linux系統(tǒng)為Led測試Demo提供驅(qū)動支持,產(chǎn)生設(shè)備節(jié)點/dev/leds。
led驅(qū)動代碼位于linux內(nèi)核目錄/driver/char/forlinx210_leds.c中。
Libraries層:
Android包含一個C/C++庫的集合,供Android系統(tǒng)的各個組件使用。一些核心庫包括:系統(tǒng)C庫,媒體庫,界面管理,LibWebCore,SGL,3D庫,F(xiàn)reeType,SQLite等。
此處我們用到了JNI方法。JNI是Java Native Interface的縮寫,譯為Java本地接口。它允許Java代碼和其他語言編寫的代碼進行交互。在Android中使用JNI方法可以讓Java程序調(diào)用C/C++語言程序。Android中很多Java類都具有native接口,這些接口由本地實現(xiàn),然后注冊到系統(tǒng)中。
JNI在Android系統(tǒng)中有著廣泛的應(yīng)用。Android系統(tǒng)底層都是C/C++實現(xiàn)的,上層提供的API都是Java的,Java通過JNI調(diào)用底層的實現(xiàn)。比如:AndroidAPI多媒體接口MediaPlayer類,其實底層通過JNI調(diào)用libmedia庫。由于JNI的存在可以讓我們重用很多已經(jīng)存在C/C++的庫,省去了重復(fù)開發(fā)的麻煩,并且可以利用很多開源的庫(Android庫中就有很多開源庫,比如libjpeg,libpng等等),并且讓我們開發(fā)的程序更有效率(C/C++代碼發(fā)揮硬件最佳性能)
在Led測試程序中本地的C文件位于源代碼樹的./device/samsung/smdkv210/leds下面,里面實現(xiàn)了向框架層注冊本地函數(shù),供上層的framework.jar庫調(diào)用。文件編譯成libleds.so動態(tài)庫,位于文件系統(tǒng)的/system/lib目錄下面。
Application Framwork 層:
framework層代碼采用Java語言編寫,提供了大量的API接口供上層應(yīng)用程序進行調(diào)用。
在Led測試程序中framework層代碼位于./frameworks/base/forlinx/java/device/v210/leds/Leds.java。
編譯好的framework.jar位于文件系統(tǒng)的/system/framework/目錄下面。
Application 層:
應(yīng)用層位于Android系統(tǒng)架構(gòu)的最高層,是給用戶提供服務(wù)的最直接的程序,用戶編寫的程序基本上位于這一層。
TestKey.apk是用戶操作界面,用戶通過操作界面上的按鈕來打開和關(guān)閉Led。
Testkey.apk源碼工程文件位于源代碼樹的./packages/apps/TestKey。
下面的章節(jié)重點講述的就是Application層中Testkey.apk應(yīng)用軟件在Eclipse中的開發(fā)過程。打開TestKey應(yīng)用程序,可以看到有l(wèi)ed,ADC,溫度,蜂鳴器等功能,在這里我們主要關(guān)注led的實現(xiàn)部分。


二、創(chuàng)建APP工程
打開eclipse創(chuàng)建一個新的android工程,菜單欄點擊File->New->Android Application Project
彈出New AndroidApplication框,輸入工程名等如下圖:


然后一直點next直到最后點finish,創(chuàng)建工程完畢。為打開工程編輯頁面,點擊eclipse左側(cè)的java圖標,如下圖所示:



為方便編輯,彈出工程編輯窗口后,拖動窗口使其全屏,如下圖:



至此創(chuàng)建并打開了新工程,下面就為其添加內(nèi)容。
首先,設(shè)定界面布局。
在進行界面設(shè)計之前,先說一下Android界面的布局類型。Andorid的界面定義文件,在工程目錄下的res/layout的xml文件里面,一般情況下一個xml對應(yīng)一個或一類界面。
Android界面基本布局類型:
FrameLayout(框架布局):里面只可以有一個控件,并且不能設(shè)計這個控件的位置,控件會放到左上角。
LinearLayout(線性布局):里面可以放多個控件,但是一行只能放一個控件。
TableLayout(表格布局):這個要和TableRow配合使用,很像html里面的table。
AbsoluteLayout(絕對布局):里面可以放多個控件,并且可以自己定義控件的x,y的位置。
RelativeLayout(相對布局):里面可以放多個控件,不過控件的位置都是相對位置。
在eclipse左側(cè)的Package Explorer部分找到布局文件并打開。單擊LedTest/res/layout/雙擊activity_main.xml則在右側(cè)代碼編輯部分打開。在代碼編輯部分的底部有顯示方式的選擇,xml文件有兩種顯示方式,布局圖像顯示方式和代碼顯示方式,對應(yīng)Graphical Layout和activity_main.xml。因此設(shè)定布局也有兩種方法,第一種是在Graphical Layout界面,從左側(cè)拖動需要的控件到右側(cè)的工程布局顯示框中,第二種是直接編輯xml文件。在這里采用第二種方法。點擊activity_main.xml以代碼方式打開。把原有代碼刪掉,自己寫xml代碼,如下:

http://schemas.android.com/apk/res/android" data-ke-src=">http://schemas.android.com/apk/res/android" data-ke-src=">http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
    <CHECKBOX
        android:id="@+id/led1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/led1" />
    
    <CHECKBOX
        android:id="@+id/led2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/led2" />

    <CHECKBOX
        android:id="@+id/led3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/led3" />

    <CHECKBOX
        android:id="@+id/led4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/led4" />
 

以上布局是用垂直方式排列四個checkbox復(fù)選框。復(fù)選框提供一個制造單一選擇開關(guān)的方法;它包括一個小框和一個標簽。
同時需要修改工程中的TestKey/res/values/strings.xml文件,添加復(fù)選框標簽的定義。添加完成后strings.xml文件內(nèi)容如下:

    TestKey
    Settings
    Hello world!
    LED1
    LED2
    LED3
    LED4


以上步驟完成了主界面的布局,效果可以通過activity_main.xml文件的Graphical Layout顯示方式查看,如下圖:



 其次,添加java代碼部分。
這部分我們要實現(xiàn)的功能是勾選界面上的checkbox復(fù)選框,開發(fā)板上相應(yīng)的LED燈則點亮,取消勾選則變暗。在上一步已經(jīng)做好了四個checkbox復(fù)選框的布局工作,這一步要做的是為checkbox綁定監(jiān)聽器,監(jiān)聽checkbox的選中和取消勾選這種勾選狀態(tài)的改變,并且執(zhí)行相應(yīng)的打開和關(guān)閉LED的操作。監(jiān)聽器用到的是OnCheckedChangeListener類。打開和關(guān)閉LED的操作用到的是我們在第一章中自己編譯的SDK中device.v210.leds包中的Leds.class類中的ledOn和LedOff方法,可以在eclipse左側(cè)的Package Explore里點擊TestKey工程下的Android4.0.3展開,再點擊android.jar展開包含所有的包找到我們需要的包和類,如下圖:



以上是大體的實現(xiàn)方法,然后就是添加實際的代碼。在eclipse左側(cè)的Package Explorer部分找到源碼并打開,單擊TestKey/src/com.example.testkey/雙擊MainActivity.java則在右側(cè)代碼編輯部分打開。此時默認已經(jīng)有寫好的Activity,需要在里面添加自己的代碼,之后整個MainActivity.java如下:
package com.example.testkey;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import device.v210.leds.Leds;

public class MainActivity extends Activity {
 
 private CheckBox        LED1;  //define checkbox
    private CheckBox        LED2;
    private CheckBox        LED3;
    private CheckBox        LED4;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  LED1=(CheckBox)findViewById(R.id.led1); //get checkbox from xml file
  LED2=(CheckBox)findViewById(R.id.led2);
  LED3=(CheckBox)findViewById(R.id.led3);
  LED4=(CheckBox)findViewById(R.id.led4);
  
  //set listener for checkbox
  LED1.setOnCheckedChangeListener(new OnCheckedChangeListener(){

   @Override
   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {
    // TODO Auto-generated method stub
    Leds leds = new Leds();
    if(isChecked==true){
     leds.ledOn(0);  //turn on the LED
                }
                else
                {
                    leds.ledOff(0); //turn on the LED
                }
    
   }
   
  });
  
  LED2.setOnCheckedChangeListener(new OnCheckedChangeListener(){

   @Override
   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {
    // TODO Auto-generated method stub
    Leds leds = new Leds();
    if(isChecked==true){
     leds.ledOn(1);
                }
                else
                {
                    leds.ledOff(1);
                }
    
   }
   
  });
  LED3.setOnCheckedChangeListener(new OnCheckedChangeListener(){

   @Override
   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {
    // TODO Auto-generated method stub
    Leds leds = new Leds();
    if(isChecked==true){
     leds.ledOn(2);
                }
                else
                {
                    leds.ledOff(2);
                }
    
   }
   
  });
  LED4.setOnCheckedChangeListener(new OnCheckedChangeListener(){

   @Override
   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {
    // TODO Auto-generated method stub
    Leds leds = new Leds();
    if(isChecked==true){
     leds.ledOn(3);
                }
                else
                {
                    leds.ledOff(3);
                }
    
   }
   
  });
  
 }
 
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}
以上則完成了整個TestKey應(yīng)用程序LED部分的開發(fā)。實現(xiàn)了從界面上選中和取消LED框來控制led燈的亮滅的功能?,F(xiàn)在,對Android應(yīng)用程序開發(fā)有了基本的了解,開始動手開發(fā)自己的Android應(yīng)用程序吧!
更多關(guān)于嵌入式開發(fā)板相關(guān)知識點就在飛凌官網(wǎng):http://m.alphatocol.com

 

資料下載:

[入門指導(dǎo)]簡述Android 應(yīng)用程序開發(fā)方法  點擊下載





相關(guān)產(chǎn)品 >

  • OKT507-C 開發(fā)板

    CPU: T507 工業(yè)級處理器,超低功耗,10年+生命周期|推薦全志工業(yè)級T507開發(fā)板系列,飛凌OKT507-C開發(fā)板采用全志T507 四核工業(yè)級處理器 T507設(shè)計開發(fā),Cortex-A53架構(gòu),工業(yè)級寬溫,性能強,低功耗,是一款高性價比的工業(yè)級產(chǎn)品,提供豐富的開發(fā)設(shè)計資料,提供產(chǎn)品規(guī)格書,軟硬件手冊等,全志的T507適用于車載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領(lǐng)域。

    了解詳情
    OKT507-C 開發(fā)板
  • OK3568-C開發(fā)板

    強而穩(wěn),國產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國產(chǎn)工業(yè)級AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計。RK3568作為國產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊_原理圖等,


    了解詳情
    OK3568-C開發(fā)板

推薦閱讀 換一批 換一批