PIXNET Logo登入

心的距離

跳到主文

Google
Custom Search

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 8月 06 週四 200910:44
  • android -- widget example

hellowidget
廢言
android 的應用程式,對我來說,都是玩票性質。為了做表面功夫,每個禮拜都有東西可以present,也只好做一些自己沒什麼興趣的事了。不過老板也有他的道理,現在不是喜不喜歡,願不願意的問題,而是在"高層"那些不懂技術的beta user的眼中,要了解自己在他們心中有沒有value。說穿了,這不只是你為公司做了多少事,牲犧了多少自我,更是你的表面功夫,嘴炮能力的高低。隨便講個比例,辛辛苦苦的完成了一個projcect,在老板眼中可能可以拿到三成的value。如果就此打住,那你就是這樣了,公司不會感謝你,不景氣的時候,你仍然是裁員名單的正取生。但如果嘴炮能力夠,懂得吹噓,才有可能拿到那佔大部份的七成。更有甚者,會有另一票完全沒辛苦過的人,會來搶這七成。這是事實,也是人性。只是得問問自己,要站在哪個點上?有多sophiticated?某種程度上,我的確是變了,讓我有點討厭自己。
 
引言
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(2) 人氣(15,900)

  • 個人分類:android
▲top
  • 7月 30 週四 200911:09
  • android -- 應用程式自我介紹之intent resolution


[轉載請註明出處] http://kezeodsnx.pixnet.net/blog
作者: kezeodsnx
本篇主要參考intent and intent filter,加上個人說明與補充而成。
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(2) 人氣(36,795)

  • 個人分類:android
▲top
  • 7月 15 週三 200913:33
  • android--logcat使用方法


[轉載請註明出處] http://kezeodsnx.pixnet.net/blog

作者: kezeodsnx
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(3) 人氣(44,004)

  • 個人分類:android
▲top
  • 7月 13 週一 200913:38
  • [轉貼]Android的应用程序结构分析:HelloActivity

來源:Android的应用程序结构分析:HelloActivity

本例以一個簡單的HelloActivity程序為例,簡單介紹Android應用程序的源代碼結構。事實上,Android應用程序雖然不是很復雜,但是通常涉及了JAVA程序,XML文件,Makefile多方面的內容。HelloActivity雖然簡單,但是麻雀雖小,五髒俱全,是學習 Android應用程序的最好示例。
第一部分:HelloActivity的源代碼
HelloActivity工程的源代碼在Android目錄的development/samples/HelloActivity/中,代碼的結構如下所示:
development/samples/HelloActivity/
|-- Android.mk
|-- AndroidManifest.xml
|-- res
|   |-- layout
|   |   |-- hello_activity.xml
|   |-- values
|       |-- strings.xml
|-- src
|   |-- com
|       |-- example
|           |-- android
|               |-- helloactivity
|                   |-- HelloActivity.java
|-- tests
    |-- Android.mk
    |-- AndroidManifest.xml
    |-- src
        |-- com
            |-- android
                |-- helloactivity
                    |-- HelloActivityTest.java
其中tests是一個獨立的項目,可以暫時不考慮。其他部分看作一個Android的一應用程序的工程。這個工程主要的組成部分如下所示:
AndroidManifest.xml:工程的描述文件,在運行時有用處
Android.mk:整個工程的Makefile
res:放置資源文件的目錄
src/com /example/android/helloactivity/HelloActivity.java:這是JAVA類文件,這個文件的路徑表示在 Andorid的JAVA包的結構中的位置,這個包的使用方式為com.example.android.helloactivity。
第二部分: 編譯的中間結果
這個HelloActivity工程經過編譯後將生成out/target/common/obj/APPS /HelloActivity_intermediates/目錄,這個目錄中的內容都是HelloActivity工程相關的,更具體地說都與 development/samples/HelloActivity/中的Android.mk文件相關。
out/target/common/obj/APPS/HelloActivity_intermediates/
|-- classes.dex                       (字節碼)
|-- classes.jar                       (JAR文件)
|-- public_resources.xml              (根據resources結構生成的xml)
|-- src
    |-- R.stamp
    |-- com
        |-- example
            |-- android
                |-- helloactivity
                    |-- R.java        (resources生成的文件)
classes.dex  是一個最重要的文件,它是給Android的JAVA虛擬機Dalvik運行的字節碼文件。
classes.jar是一個JAR文件,JAR的含義為Java ARchive,也就是Java 歸檔,是一種與平台無關的文件格式,可將多個文件合成一個文件。解壓縮之後的目錄結構:(JAVA標准編譯得到的類)
classes
|-- META-INF
|   |-- MANIFEST.MF
|-- com
    |-- example
        |-- android
            |-- helloactivity
                |-- HelloActivity.class
                |-- R$attr.class
                |-- R$id.class
                |-- R$layout.class
                |-- R$string.class
                |-- R.class
各個以class為擴展名的文件,事實上是JAVA程序經過編譯後的各個類的字節碼。
第三部分: 目標apk文件
目標apk文件是Android的JAVA虛擬機Dalvik安裝和運行的文件,事實上這個apk文件將由編譯的中間結果和原始文件生成。apk文件的本質是一個zip包。這個APK包解壓縮後的目錄結構如下所示:
out/target/product/generic/obj/APPS/HelloActivity_intermediates/package.apk_FILES/
|-- AndroidManifest.xml
|-- META-INF
|   |-- CERT.RSA
|   |-- CERT.SF
|   |-- MANIFEST.MF
|-- classes.dex
|-- res
|   |-- layout
|       |-- hello_activity.xml
|-- resources.arsc
值得注意的是,這裡的xml文件經過了處理,和原始的文件不太一樣,不能按照文本文件的方式閱讀。
第四部分: 源代碼的各個文件
Android.mk是整個工程的“Makefile”,其內容如下所示:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := samples
# Only compile source java files in this apk.
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := HelloActivity
LOCAL_SDK_VERSION := current
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
這個文件在各個Android的工程中都是類似的,其中LOCAL_PACKAGE_NAME表示了這個包的名字。LOCAL_MODULE_TAGS 表示了模塊的標,在這裡使用的是
samples,正式的應用程序(packages目錄中的應用)中多使用eng development。
AndroidManifest.xml是這個HelloActivity工程的描述文件,其內容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.helloactivity">
    <application android:label="Hello, Activity!">
        <activity android:name="HelloActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>
其中package用於說明這個包的名稱,android:labeapplication中的內容是表示這個應用程序在界面上顯示的標題,activity中的android:name表示這個Android的活動的名稱。
文件src/com/example/android/helloactivity/HelloActivity.java是程序主要文件,由JAVA語言寫成
package com.example.android.helloactivity;
import android.app.Activity;             
import android.os.Bundle;                
public class HelloActivity extends Activity {
    public HelloActivity() {
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hello_activity);
    }
}
com.example.android.helloactivity表示的是這個包的名稱,在文件的頭部引入了兩個包android.app.Activity是一個Android活動(Activity)包,每一個Android活動都需要繼承Activity類。
包android.os.Bundle用於映射字符串的值。
onCreate()是一個重載的函數,在這個函數中實現應用程序創建的所執行的過程。其中setContentView()設置當前的視圖(View)。
設置的方法是使用一個文件,這個文件因此決定了視圖中包含的內容。這裡使用的是R.layout.hello_activity,表示從res/layout/目錄中使用hello_activity.xml文件。
res/layout/hello_activity.xml文件的內容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textSize="18sp"
    android:autoText="true"
    android:capitalize="sentences"
    android:text="@string/hello_activity_text_text" />
其中定義了一個可編輯的文本(EditText),下面的各項其實是它的各種屬性,android:text表示這個文本的內容,string/hello_activity_text_text表示找到相應的文件,也就是res/value/string.xml文件中的 hello_activity_text_text文本。
res/value/string.xml的內容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello_activity_text_text">Hello, World!</string>
</resources>
hello_activity_text_text文本被res/layout/hello_activity.xml文件引用,正是應用程序運行時在屏幕顯示的文本。
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(3,347)

  • 個人分類:android
▲top
  • 7月 13 週一 200910:44
  • Android的目錄結構 -cupcake


[轉載請註明出處] http://kezeodsnx.pixnet.net/blog
作者: kezeodsnx
這篇有好一部分是引用:Android的源代碼結構,L10N和自己的補充如下:
Google提供的Android第一層的目錄和文件如下所示:
|-- Makefile        (整個android的Makefile)
|-- bionic          (glibc的reimplementation)
|-- bootable      (bootloader,diskinstaller,recovery)    
|-- build           (host編譯和配置所需要的script和工具,而非target)
|-- dalvik          (JAVA虛擬機)
|-- development     (程序開發所需要的template和工具)
|-- external        (target machine使用的一些lib)
|-- frameworks      (應用程式的框架層)
|-- hardware        (與硬體相關的lib)
|-- kernel          (Linux2.6的source)
|-- packages        (Android的各種應用程式,如alarmclock,calendar,和一些提供應用程式使用的provider)
|-- prebuilt        (Android在各種平台下預先編譯好的image,如gdbserver,vmlinux)
|-- recovery        (cupcake移至bootable)
|-- system          (Android的底層的一些lib,如wlan,bluetooth,core。core裡包括init,toolbox(ls,date, etc), netutility(netcfg),liblog, etc)
bionic目錄如下所示:
bionic/ (only 200k)
|-- Android.mk
|-- libc
|-- libdl
|-- libm
|-- libstdc++
|-- libthread_db
|-- linker
bootable目錄展開:
bootloader/
-- legacy
    |-- Android.mk
    |-- README
    |-- arch_armv6
    |-- arch_msm7k
    |-- fastboot_protocol.txt
    |-- include
    |-- libboot
    |-- libc
    |-- nandwrite
    |-- usbloader
--diskinstaller/
    |-- Android.mk
    |-- config.mk
    |-- editdisklbl
    |-- init.rc
    |-- installer.c
    |-- installer.conf
    |-- installer.h
    |-- installer_img_layout.conf
    |-- libdiskconfig
--recovery/
    |--amend
    |--Android.mk
    |--bootloader.c
    |--bootloader.h
    |--commands.c
    |--commands.h
    |--common.h
    |--etc
    |--firmware.c
    |--firmware.h
    |--install.c
    |--install.h
    |--minui
    |--minzip
    |--mtdutils
    |--NOTICE
    |--recovery.c
    |--res
    |--roots.c
    |--roots.h
    |--test_roots.c
    |--tools
    |--ui.c
    |--verifier.c
    |--verifier.h
build目錄展開:
build/
|-- buildspec.mk.default
|-- cleanspec.mk
|-- core                       (各種以mk為結尾的文件,它門是編譯所需要的Makefile)
|-- envsetup.sh
|-- libs
|-- target                     (包含board和product兩個目錄,為target device所需要文件)
|-- tools                      (編譯過程中host machine所需要的工具,一些需要經過編譯生成)
其中,core中的Makefile是整個Android編譯所需要的真正的Makefile,它被頂層目錄的Makefile引用。
envsetup.sh是一個在使用emulator的時候,用於設置環境的script。
dalvik目錄用於提供Android JAVA應用程式執行的基礎————JAVA虛擬機。
development目錄展開:
development
|-- apps                       (Android應用程式的template)
|-- build                      (編譯script的template)
|-- cmds                       (內含一隻monkey,可用來對應用程式做一些stress test)
|-- data
|-- docs                         (sdk buid相關的文件)
|-- emulator                   (emulator相關)
|-- host                       (windows平台的一些工具)
|-- ide                           (elicpse相關的東西)
|-- pdk                          (platform development kit)
|-- samples                    (一些範例程式)
|-- simulator                  (大多是target device的一些工具)
|-- tools                           (在host machine上使用到的工具)
在emulator目錄中qemud是使用QEMU時target device的後台程序,skins是在emulator上手機的界面。
samples中包含了很多Android簡單應用程式,為開發者學習開發Android程序提供了很大便利,可以作為template使用。
external目錄展開:(target machine使用的一些lib)
external/
|-- aes
|-- apache-http
|-- bluez
|-- clearsilver
|-- dbus
|-- dhcpcd
|-- dropbear
|-- elfcopy
|-- elfutils
|-- emma
|-- esd
|-- expat
|-- fdlibm
|-- freetype
|-- gdata
|-- giflib
|-- googleclient
|-- icu4c
|-- iptables
|-- jdiff
|-- jhead
|-- jpeg
|-- libffi
|-- libpcap
|-- libpng
|-- libxml2
|-- netcat
|-- netperf
|-- neven
|-- opencore
|-- openssl
|-- oprofile
|-- ping
|-- ppp
|-- protobuf
|-- qemu
|-- safe-iop
|-- skia
|-- sonivox
|-- sqlite
|-- srec
|-- strace
|-- tagsoup
|-- tcpdump
|-- tinyxml
|-- tremor
|-- webkit
|-- wpa_supplicant
|-- yaffs2
|-- zlib
在external中,每個目錄表示Android目標系統中的一個module,可能有一個或者若干個lib構成。其中:
opencore為PV(PacketVideo),它是Android多媒體框架的核心。
webkit是Android網絡瀏覽器的核心。
sqlite是Android數據庫系統的核心。
openssl是Secure Socket Layer,一個網絡協議層,用於為數據通訊提供安全支持。
frameworks目錄展開的一個級別的目錄如下所示:
frameworks/
|-- base  (模擬器上看到的UI界面)
|-- opt
|-- policies
frameworks是Android應用程式的框架,不過看起來不太像有relase framework 的source code。事實上,個人也認為不應該來修改framework的程式,因為framework是所有應用程式在執行時所共同使用的,必須要follow,除非不在乎共通性! 要改的應該是framework下的lib層,也就是opensource或是android自己的lib。
hardware是一些與硬體相關的lib,看起來像是架構圖中的hal層。不知道這層是不是就是可讓driver避開GPL問題的那個洞?
kernel是Linux2.6的source
packages目錄展開的兩個級別的目錄如下所示:
packages/
|-- apps
|   |-- AlarmClock
|   |-- Browser
|   |-- Calculator
|   |-- Calendar
|   |-- Camera
|   |-- Contacts
|   |-- Email
|   |-- GoogleSearch
|   |-- HTMLViewer
|   |-- IM
|   |-- Launcher
|   |-- Mms
|   |-- Music
|   |-- PackageInstaller
|   |-- Phone
|   |-- Settings
|   |-- SoundRecorder
|   |-- Stk
|   |-- Sync
|   |-- Updater
|   |-- VoiceDialer
|-- providers
    |-- CalendarProvider
    |-- ContactsProvider
    |-- DownloadProvider
    |-- DrmProvider
    |-- GoogleContactsProvider
    |-- GoogleSubscribedFeedsProvider
    |-- ImProvider
    |-- MediaProvider
    |-- TelephonyProvider
packages中包含三個目錄,其中apps中是Android中的各種應用程式,providers是一些內容提供者(在Android中的一個data source,用來在應用程式間share data)。另外一個就是國內開發商很在意的輸入法了,目前只看到LatinIME  PinyinIME。
packages中兩個目錄的內容大都是使用JAVA編寫的程式,各個文件夾的層次結構是類似的。
prebuilt目錄展開:
prebuilt/
|-- Android.mk
|-- android-arm
|-- common
|-- darwin-x86
|-- linux-x86
|-- windows
system目錄展開:
system/
|-- bluetooth
|   |-- bluedroid
|   |-- brfpatch
|-- core
|   |-- Android.mk
|   |-- README
|   |-- adb
|   |-- cpio
|   |-- debuggerd
|   |-- fastboot            (不是快速快機,而是一般所謂的刷機程式)
|   |-- include            (各個庫接口的頭文件)
|   |-- init                     (就是開機的init)
|   |-- libctest
|   |-- libcutils
|   |-- liblog
|   |-- libmincrypt
|   |-- libnetutils
|   |-- libpixelflinger
|   |-- libzipfile
|   |-- logcat
|   |-- logwrapper
|   |-- mkbootimg
|   |-- mountd
|   |-- netcfg
|   |-- rootdir
|   |-- sh
|   |-- toolbox
|-- extras  (一些跟process相關的統計資料工具,如uptime,memory等)
|   |-- Android.mk
|   |-- latencytop
|   |-- libpagemap
|   |-- librank
|   |-- procmem
|   |-- procrank
|   |-- showmap
|   |-- showslab
|   |-- sound
|   |-- su
|   |-- tests
|   |-- timeinfo
|-- wlan
    |—ti
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(12,678)

  • 個人分類:android
▲top
  • 7月 10 週五 200919:07
  • [轉貼] JNI與Android VM之關係

來源: 上課講義摘錄之23:JNI與Android VM之關係--Android大舞台 文章講義分享 --Google Android 論壇
 
1.  從如何載入*.so檔案談起
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(3,445)

  • 個人分類:android
▲top
  • 7月 10 週五 200919:00
  • [轉貼]Android模擬器adb命令介紹


來源: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://www.android123.com.cn/moniqi/54.html
http://www.android123.com.cn/moniqi/55.html
http://blackdidi.wordpress.com/2008/10/10/android-how-to-mount-the-sdcard-image-file-to-android-emulator/
http://www.android123.com.cn/moniqi/48.html
官方ADB文件:
http://code.google.com/android/reference/adb.html
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(9,269)

  • 個人分類:android
▲top
  • 7月 10 週五 200918:42
  • android ramdisk的壓縮與解壓縮

[轉載請註明出處] http://kezeodsnx.pixnet.net/blog
作者: kezeodsnx
在linux 2.6後使用的cpio 格式,方法都類似:
user-ubuntu:/home/user/android-sdk-linux_x86-1.5_r2/platforms/android-1.5/images# mkdir ramdisk-ext
user-ubuntu:/home/user/android-sdk-linux_x86-1.5_r2/platforms/android-1.5/images# cd ramdisk-ext/
user-ubuntu:/home/user/android-sdk-linux_x86-1.5_r2/platforms/android-1.5/images/ramdisk-ext# gunzip -dc ../ramdisk.img | cpio -idm
462 blocks
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(1,553)

  • 個人分類:android
▲top
  • 7月 10 週五 200913:19
  • Android NDK 安裝與範例

import
[轉載請註明出處] http://kezeodsnx.pixnet.net/blog
作者: kezeodsnx
安裝
下載完後,解壓縮:
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(10,742)

  • 個人分類:android
▲top
  • 7月 10 週五 200912:42
  • Android 1.5 NDK, R1

[轉載請註明出處] http://kezeodsnx.pixnet.net/blog
作者: kezeodsnx
簡介
NDK是SDK的companion tool,N是指Native,有一點imply performance的感覺,開發者可透過NDK繞過application framework,指接使用底層的資源。NDK需與SDK搭配使用。可在此下載。
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(3,457)

  • 個人分類:android
▲top
12»

文章搜尋

廣告版面

廣告版面

參觀人氣

  • 本日人氣:
  • 累積人氣:

文章分類

toggle 生活 (4)
  • 高登鐵漢 (7)
  • 英文筆記 (0)
  • 愚蠢上班族 (12)
  • 無病呻吟 (9)
toggle Linux (7)
  • kernel (2)
  • System (45)
  • Shell (8)
  • android (12)
  • C programming (15)
  • Multimedia (10)
  • Driver (27)
  • server (2)
  • wireless (7)
  • 有的沒的 (3)
  • 未分類文章 (1)

google analytics