顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2012年3月29日 星期四

Android Simple File Browser


private ArrayList mFiles = null;
private final String ROOT = "/";

// main file browse function
private void browse(String path) {
mFiles.clear(); // clean previous file list
mPath.setText(path); // a TextView, record file path

File folder = new File(path);
File[] files = folder.listFiles();

if(files != null) {
for(File f : files) {
// add file name to list
if(f.isDirectory()) {
mFiles.add(f.getName() + "/");
}
else {
mFiles.add(f.getName());
}
}
}

ArrayAdapter fileAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mFiles);
mList.setAdapter(fileAdapter);
}


@Override
public void onClick(View v) {
int id = v.getId();
switch(id) {
case R.id.home:
browse(ROOT);
break;
case R.id.back:
String current = (String) mPath.getText();
if(!current.equals(ROOT)) {
// get parent folder location
String parent = current.substring(0, current.lastIndexOf("/", current.length()-2)+1);
browse(parent);
}
break;
}
}

@Override
public void onItemClick(AdapterView l, View v, int position, long id) {

String path = mPath.getText() + mFiles.get(position);
File file = new File(path);

if(file.isDirectory()) {
file = null;
browse(path);
}
else {
// do something you wants
}
}

2011年2月25日 星期五

Eclipse Debug Certificate Expired Solution

遇到的問題是 eclipse 上面 Android Debug Certificate 過期了,導致無法產生 Android Apk
解決的方法,砍掉 debug.keystore 這個檔案
檔案存在的位罝在:
Win7 - C:\Users\\.android\
XP - C:\Documents and Settings\\.android 或 C:\Documents
and Settings\\Local Settings\Application Data\Android

2010年5月23日 星期日

Android "insufficient permissions for device "

當使用USB連接到device的時候,出現了"insufficient permissions for device
", 下面是我的做法:
$ sudo -s
$ ./adb kill-server
$ ./adb start-server

接下來就可成功連接到device了

2010年2月8日 星期一

Build Image Language

append this line "PRODUCT_LOCALES := zh_TW en_GB es_US ja"[...other local
language] at end of [top-dir]/build/target/product/generic.mk if compiling
generic, note,zh_TW must be first position

PRODUCT_LOCALES := \
en_US \
de_DE \
zh_CN \
ru_RU \



reference:
http://pdk.android.com/online-pdk/guide/index.html
http://www.johandekoning.nl/index.php/2009/06/08/building-android-15-building-the-source/

2009年12月10日 星期四

Eclipse 在 Ubuntu 9.10 的視窗問題

在Ubuntu 9.10下,想透過ADT外掛來新增AVD,但卻一直沒法把視窗叫出來
後來執行下面的command,就可以解決這個問題
export GDK_NATIVE_WINDOWS=true

但在9.10下開發Android,感覺似乎相當不穩!

2009年10月17日 星期六

Build Custom Application With Android Source

如果要把自己寫的 Android 專案 放入 Android Source code 中,與 Source 一起 build 的話
必需先在自己的專案下建立一 Android.mk ,再把整個專案放到 packages/apps/

接下來要加入專案編譯的路徑到 build/target/product/core.mk
打開 core.mk 後,在 PRODUCT_PACKAGES := \ 下面 (fremework-res \ 之後, Bugreport 之前), 加入自已放在 apps/ 下的目錄名稱就可以了!

2009年10月5日 星期一

Build Android-x86 USB Image

1. 首先取得 source 並將它存放在 android-x86 目錄:
$ mkdir android-x86
$ cd android-x86
$ repo init -u git://git.android-x86.org/platform/manifest.git
$ repo sync


2. Build Image
$ make -jX usb_img TARGET_PRODUCT=eeepc
X:CPU 核心數參數,如果是單核,用 1 取代 X,如果是雙核,則用 2,以此類推。
Build 完後,產出會放在 android-x86/out/target/product/eeepc/ 下
建議:如果是重 build 的話,將上次產生出來的 eeepc_usb.img 刪掉

3. 準備一顆隨身碟放 Android Image
$ sudo dd if=out/target/product/eeepc/eeepc_usb.image of=/dev/sdX
/dev/sdX:是USB Device 的名字,如果不知道,可以用 mount 指令來查詢

2009年9月17日 星期四

Layout XML中使用自訂 styleable 的 namespace 定義方式

在 attrs.xml 中宣告了 styleable 的自訂標籤
如:
<resources>
<declare-styleable name="Custom">
<attr name="position">
<enum name="top" value="0" />
<enum name="bottom" value="1" />
</attr>
</declare-styleable>
</resources>

當在 layout 的 xml 要使用到自訂標籤時,namespace 的宣告方式如下:
xmlns:name="http://schemas.android.com/apk/res/packageName
Sample:
<Framelayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.test.custom.ui
xmlns:Custom="http://schemas.android.com/apk/res/com.test.custom"
Custom:position="top" />
</Framelayout>

2009年8月4日 星期二

Android Log Debug

在 Android 系統上使用 logcat 來 debug:
1. Alt + F1 切換到 command mode (切回 Alt + F7)
2. 切換到 data (better)
cd /data
3. 將操作後動作所產生的 log info 寫入檔案中
logcat -d -f fileName.log
4. sync
sync
接下來就可以使用其他的OS來讀取所產生的 Log 檔

2009年6月9日 星期二

常用Android指令

  • Android模擬器命令列啟動模式

  • 在android-sdk-windows-1.1\tools執行emulator以執行模擬器
    加上-skin參數,指定顯示模式為HVGA-L,則可轉為橫向
    emulator - skin HVGA-L (480*320,水平顯示)
    emulator - skin HVGA-P (320*480,垂直顯示,模擬器預設模式)
    emulator - skin HVGA-L (320*240,水平顯示)
    emulator - skin HVGA-P (240*320,垂直顯示)


  • 使用mksdcard指令模擬1GB的記憶卡

  • mksdcard 1024M sacard.img

  • 模擬插入 SD 卡的模擬器

  • emulator - sdcard sdcard.img

  • 使用 adb+push 上載檔案到SD記憶卡

  • adb push 001.jpg /sdcard (複製檔案到 /sdcard 目錄下)
    adb push pictures /sdcard (複製 picture 照片目錄到 /sdcard 目錄下)
    adb push mp3 /sdcard (複製 mp3 音樂目錄到 /sdcard 目錄下)
    adb shell (Android 模擬器啟動命令列模式)
    #cd /sdcard (進入 /sdcard 目錄)
    #ls (查看 SD 記憶卡中的檔案)


  • 使用 adb+pull 從 SD 記憶卡下載檔案

  • adb pull /sdcard/001.jpg . (下載 /sdcard 目錄下的檔案)
    adb pull /sdcard/pictures . (下載 sdcard 目錄下的 pictures 目錄)


  • 刪除 SD 卡裡面的檔案

  • adb shell
    #ced /sdcard
    #rm 001.jpg (刪除 SD 記憶卡裡的檔案)
    #rm -r * (刪除 SD 記憶卡裡所有檔案與目錄)


  • Android模擬器影片播放方法

  • mksdcard 4096M video.img (製作一個影像檔的 SD 記憶卡)
    adb push video.avi /sdcard (從電腦複製影像檔到 SD 卡中)
    emulator -sdcard video.img (啟動模擬器並載入 SD 卡)

    下載免費的影片播放軟體,ex: Meridian Video Player (iiivpa.apk)
    http://sites.google.com/site/eternalsandbox/Home/meridian-video-player
    adb install iiivpa.apk (安裝Meridian Video Player)
    接下來就可以用裝上去的player播放.mp4、3gp與.wmv三種檔案格式

  • 安裝 APK 應用程式

  • adb install filename.apk (安裝filename.apk)
    adb install -r filename.apk (保留已設定資料,重新安裝filename.apk)
    adb -s emulator-5554 install filename.apk (指定安裝 APK 套件在 5554 的 Android 模擬器中)


  • 移除 APK 應用程式

  • adb uninstall package
    adb uninstall -k package (移除程式時,保留資料)

    此package名稱不是安裝APK套裝時的檔名或顯示在模擬器中的應用程式名稱
    可以先到/data/data或data/app目錄下,查詢想移除的package名稱
    adb shell
    ls /data/data 或 /data/app (查詢 Package 名稱)
    exit
    adb uninstall package (移除查詢到的 Package)


  • ADB 系統除錯與連結工具

  • $adb devices (顯示目前有多少個模擬器正在執行)
    $adb -s <serialNumber> <command> (指定模擬器來操作)
    adb -s emulator-5554 install email.apk

    $adb install apkfile (安裝 APK 應用程式套件)
    adb install email.apk
    $adb uninstall package (移除 APK 應用程式套件)
    adb uninstall com.android.email

    $adb shell (進入 Android 系統指令列模式)
    $ls
    $dmesg (查看 Android Linux Kernel 運作訊息)

    ls - 顯示檔案目錄
    cd - 進入目錄
    rm - 刪除檔案
    mv - 移動檔案
    mkdir - 產生目錄
    rmdir - 刪除目錄

    $adb push <file/dir> (複製檔案到 SD 卡)
    adb push mp3 /sdcard
    $adb pull <file/dir> . (從 Android 系統下載檔案)
    adb pull /data/app/com.android.email

    $adb logcat (監控模擬器運作紀錄,以Ctrl + c 離開監控模式)
    $adb bugreport (產生 adb 除錯報告)
    $adb get-state (獲得 adb 伺服器運作狀態)
    $adb start-server (啟動 adb 伺服器)
    $adb kill-server (關掉 adb 伺服器)

    $adb forward tcp:6100 tcp:7100 (更改模擬器網路 TCP 通訊埠)
    $adb shell ps -x (顯示 Android 上所有正在執行的行程)
    $adb version (顯示 adb 版本)
    $adb help (顯示 adb 指令參數)

  • Emulator 命令列啟動參數

  • emulator -timezone Asia/Taipei (指定時區)
    emulator -no-boo-anim (省略開機小機器人動畫畫面)
    emulator -scale auto (調整模擬器視窗大小)
    emulator - scale factor (factor: 0.1-3.0)

    emulator -dpi-device 300 (更改模擬器的解析度,default為 165dpi)
    emulator -skin <skinID> (更改模擬器顯示模式)
    emulator -help-keys (顯示鍵盤快速鍵說明)
    emulator -shell (相當於adb shell 功能)
    emulator -data data.img (使 /data 目錄使用 data.img 的檔案空間)
    emulator -sdcard sdcard.img (使 /sdcard 目錄使用 sdcard.img 的檔案空間)
    emulator -cache cache.img (瀏覽器暫存檔儲存空間)

    emulator -wipe-data (使模擬器恢復到原廠設定)
    emulator -help (顯示 emulator 指令參數)

    2009年6月5日 星期五

    四大核心

    Android Application 四大核心Components:
    Activity -
    一個Activity通常就是一個單獨的畫面。每一個Activity通過一個繼承了Activity基本類別來實現。這個類別將會顯示一個或有多個View物件的界面。並且回應一些事件功能。大部份的應用程式都會由多個畫面來組成。
    每一個畫面都會實作在一個Activity裡。切換到另一個畫面就是去啟動另一個Activity起來。在某些情況下,Activity可以回傳一個數值給之前的一個Activity。當一個Activity動作產生時,它會創一個intent object,這個intent抽象地描述了Activity想要進行的動作。Intent包含了三個部份:
    1.action(動作)
    2.data(資料)
    3.category(種類)
    intent物件可以包含操作這個Activity時,所要提供的數據或訊息,但不同的應用程式有不同的intent,故透過一個intent-filter來篩選適當的數據或訊息。而當應用程式產生Intent後,目的是要接收對方傳來的資料,故還必須產生一個BroadcastReceiver,來處理這些接收到的資料。

    Services
    Service是沒有使用者介面,而且是可以長時間運作的程式碼。當應用程式進入背景狀態時,開發人員可以利用 Content.bindService()方法來跟Service進行連結的動作。當連接到一個Service時,開發人員就可以透過該Service開放出來的介面跟應用程式進行溝通。

    Broadcast receivers
    當程式來對外部的事件做些處理時,可以使用Broadcast Intent Receiver。Broadcast Intent Receiver它並不能拿來顯示UI畫面,它必需利用NotificationManager來通知使用者他們感興趣的事件發生了。

    Content Providers
    應用程式可以將應用程式的資料儲存到檔案、SQLite資料庫或其他的機制儲存起來。當開發人員希望應用程式的資料可以被其他應用程式共享時,Content Provider就會非常有用。Content Provider實現了讓應用程式之間互相分享資料的機制。使用Content Provider裡面的函式就可以讓其他的應用程式取得或儲存資料,或者是檢索資料。

    2009年6月2日 星期二

    Android Project 結構

    專案目錄 專案子目錄 資源檔案 檔案用途
    Project/
    AndroidManifest.xml 應用程式設定檔
    src/ *.java Java原始碼
    res/anim/ *.xml 動畫設定檔
    res/drawable/ *.png, *.jpg, *.gif 應用程設圖檔
    res/layout/ main.xml 視窗佈局檔
    res/values/
    arrays.xml
    colors.xml
    dimens.xml
    strings.xml
    styles.xml
    陣列定義檔
    繪圖顏色定義檔
    尺寸定義檔
    文字資源檔
    樣式定義檔

    res/xml/ *.xml 程式執行時所需讀取的XML檔
    res/raw/ *.raw 程式執行時所應用的資源檔,如:音效檔


    任一完整的Android目錄都至少要包含AndroidManifest.xml、src目錄與res目錄。

    2009年5月7日 星期四

    Android Windows開發環境設置

    1. 首先安裝 Eclipse
     http://www.eclipse.org/downloads/
     下載 Eclipse IDE for Java Developers
     然後解壓到 /develop/android/

    2. 下載 Android SDK
     http://developer.android.com/sdk/1.5_r1/index.html
     然後解壓到 /develop/android/

    3. 安裝 ADT
     有兩個方法可以案裝
     3.1 官方建議 - Eclipse Update 方式
      3.1.1 開啟 Eclipse,選 Help → Software Updates..
      3.1.2 選擇 Available Software 標籤下的 Add Site...
      3.1.3 輸入下列網址:http://dl-ssl.google.com/android/eclipse/
    或 https://dl-ssl.google.com/android/eclipse/
      3.1.4 在按下確定後,可以看見剛輸入的網址新增至 Name 欄位,然後勾選它下面的
    Developer Tools , 並選擇 Install... 開始安裝
     3.2 直接下載 ADT
      3.2.1 下載 ADT : http://developer.android.com/sdk/adt_download.html
      3.2.2 同步驟 3.1.1
      3.2.3 同步驟 3.1.2
      3.2.4 點選 Archive... ,然後選擇步驟3.2.1下載的ADT
      3.2.5 在按下確定後,可以看見剛選擇的ADT位置新增至 Name 欄位,然後勾選它下面的
    Developer Tools , 並選擇 Install... 開始安裝
     安裝完成後,將Eclipse重新啟動

    4. 設定 Eclipse 中 Android SDK 位置
     4.1 選擇 Window → Preferences
     4.2 選擇 Android (如果出現錯誤,就先不理它!)
     4.3 在右邊的 SDK Location ,選擇存放 Android SDK 的位置 /develop/android/android-sdk-windows-1.5_r1 , 選擇 OK

    還沒結束呢!接下來要先去產生一個Android虛擬機器 AVD
    5. 產生 AVD
     5.1 開啟命令提示字元,並到 Android SDK目錄下的 tools 目錄
      5.1.1 開炲 → 執行,輸入cmd
      5.1.2 輸入切換目錄指令,如:
    cd develop/android/android-sdk-windows-a.5_r1/tools
     5.2 查詢現有的 AVD targets,並選一個做develop的target
    android list targets
     結果:
    id: 1
        Name: Android 1.1
        Type: Platform
        API level: 2
        Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
    id: 2
        Name: Android 1.5
        Type: Platform
        API level: 3
        Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
    id: 3
        Name: Google APIs
        Type: Add-On
        Vendor: Google Inc.
        Description: Android + Google APIs
        Based on Android 1.5 (API level 3)
        Libraries:
         * com.google.android.maps (maps.jar)
           API for Google Maps
        Skins: QVGA-P, HVGA-L, HVGA (default), QVGA-L, HVGA-P

     5.3 依選定的target,產生一個新的AVD
    android create ave --name 自訂名稱 --target 選定的target ID

    接下來就真的可以開始在Eclipse上開發了!

    下面來個小測試:
     選擇 File → New → Project... ,然後選擇 Android Project,輸入的參數如圖:

     完成後如果出現下面錯誤:
    no classfiles specified
    Conversion to Dalvik format failed with error 1

    點一下 Project -> Clean..., 應該就可以正確執行囉!

    2009年5月6日 星期三

    Android模擬器adb命令介紹

    在SDK的Tools文件夾下包含着Android模擬器操作的重要命令adb,adb的全稱為(Android Debug Bridge就是調試橋的作用。通過adb我們可以在Eclipse中方面通過DDMS來調試Android程序,說白了就是debug工具。

    adb的工作方式比較特殊採用監聽Socket TCP 5554等端口的方式讓IDE和Qemu通訊,默認情況下adb會daemon相關的網絡端口,所以當我們運行Eclipse時adb進程就會自動運行。

    1.通過adb可以輕鬆的執行Linux Shell命令,進入設備或模擬器的shell:adb shell就可以進入模擬器的shell環境中。也可以執行各種Linux的命令,其命令格式為:
    adb shell command
    範例:
    adb shell dir 就是列舉目錄,在Linux中根目錄為/而不是Windows上的C磁碟、D磁碟
    adb shell dmesg 會列印出Linux的debug訊息。
    2.安裝apk程序到模擬器則執行adb install android123.apk,這樣名為android123的安裝包就會安裝到Android模擬器中,前提是android123.apk文件需要放到SDK\Tools目錄下。
    3.向emulator傳送文件,使用adb push android123.txt /tmp/android123.txt命令可以把SDK\Tools下的android123.txt文件傳輸到模擬器的/tmp/文件夾中,需要注意的是/tmp/文件夾中內容會在Android模擬器新啟動時清空。除了說明了使用ADT插件中DDMS外。
    4.從Android模擬器中回傳文件到電腦
    通過>adb pull /tmp/android123.txt android123.txt命令就會把模擬器的tmp文件夾下android123.txt文件回傳到電腦SDK\Tools目錄下。

    繼續android adb命令相關介紹,除了可以方便的安裝apk文件、pc和Android模擬器互傳資料外還有Android Debug Bridge一些輔助的功能。
    1.如果在Eclipse中發現有* daemon not running. starting it now *的提示可以結束adb
    adb kill-server

    2.顯示android模擬器狀態
    adb devices 端口號等信息,執行後會顯示TCP端口號
    adb get-product 獲取設備型號
    adb get-serialno 獲取序列號

    3.等待正在運行的設備
    adb wait-for-device

    4.端口轉發
    adb forward adb forward tcp:5555 tcp:1234 實現將默認的TCP 5555端口轉發到1234端口上

    5.查看bug報告
    adb bugreport
    Android - How to mount the SDCard image file to Android Emulator

    (1)首先必須產生SDCard的image file
    mksdcard: create a blank FAT32 image to be used with the Android emulator
    usage: mksdcard [-l label]
    if is a simple integer, it specifies a size in bytes
    if is an integer followed by 'K', it specifies a size in KiB
    if is an integer followed by 'M', it specifies a size in MiB

    ex:mksdcard 1024M sdcard.iso

    (2)讓SDCard連到Android Emulator
    a:./emulator -sdcard ~/.android/SDK-1.0/sdcard.iso
    b:用Eclipse中設定程式的Open Run Dialog裏,Target頁籤的Aditional Emulator Command Line Option中加入啟動參數 -sdcard scard.iso

    (3)透過adb傳收檔案到emulator
    adb push
    adb pull
    ex:
    adb push ~/mp3/audio.mp3 /sdcard/audio.mp3

    linux底下也可以使用,來管理
    mount -o loop sdcard.img android_sdcard

    (4)進入emulator的shell
    adb shell


    轉載自:http://stenlyho.blogspot.com/2008/11/androidadb.html