<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>阿偉的個人天地 &#187; Android</title>
	<atom:link href="http://cwhuang.info/tag/android/feed" rel="self" type="application/rss+xml" />
	<link>http://cwhuang.info</link>
	<description>阿偉的研究記錄：Eee PC、Android、Linux、Open Source 和其它</description>
	<lastBuildDate>Fri, 13 Aug 2010 17:25:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Froyo 源碼釋出</title>
		<link>http://cwhuang.info/2010/06/froyo-code-release</link>
		<comments>http://cwhuang.info/2010/06/froyo-code-release#comments</comments>
		<pubDate>Thu, 24 Jun 2010 07:06:53 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android-x86]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=1063</guid>
		<description><![CDATA[Android 開發者 Deva 今天下午在 android-platform 討論區上，宣佈 Android 2.2 Froyo  的源碼已經釋出的好消息。
各位開發者，開始動工吧!
]]></description>
			<content:encoded><![CDATA[<p>Android 開發者 Deva 今天下午在 <a href="http://groups.google.com/group/android-platform">android-platform</a> 討論區上，宣佈 <a href="http://groups.google.com/group/android-platform/t/caa654074a60af50">Android 2.2 Froyo  的源碼已經釋出</a>的好消息。</p>
<p>各位開發者，開始動工吧!</p>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/06/froyo-code-release/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>修正 Eclair 的藍牙音效支援</title>
		<link>http://cwhuang.info/2010/06/eclair-bluetooth-a2dp-fix</link>
		<comments>http://cwhuang.info/2010/06/eclair-bluetooth-a2dp-fix#comments</comments>
		<pubDate>Mon, 21 Jun 2010 10:04:59 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android-x86]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=1062</guid>
		<description><![CDATA[先前在開發 eclair-x86 時，曾注意到藍牙支援的一個問題，就是藍牙耳機的聲音是出不來的。藍牙的連線正常，也沒有任何錯誤訊息，但聲音還是從原本的喇叭出來，而沒有送至藍牙耳機。
原本以為是 x86 的問題。但最近在做 arm 版本的移植，也發現這個現象。因此仔細研究了一下，特別和 Nexus One 的 logcat 訊息比對。發覺問題出在 hardware/alsa_sound。因為它沒有 enable WITH_A2DP 這個 flag。
向 review.source.android.com 提交了這個 patch。今天下午收到通知，已經被 approved 並加到 master branch 了。
值得一提的是，只有用 alsa 介面的 Android 系統才會受此 bug 的影響。很多 Android 手機都並非透過 alsa 介面來控制音效，因此沒這個問題。也難怪這個 bug 一直沒被注意?
]]></description>
			<content:encoded><![CDATA[<p>先前在開發 eclair-x86 時，曾注意到藍牙支援的一個問題，就是藍牙耳機的聲音是出不來的。藍牙的連線正常，也沒有任何錯誤訊息，但聲音還是從原本的喇叭出來，而沒有送至藍牙耳機。</p>
<p>原本以為是 x86 的問題。但最近在做 arm 版本的移植，也發現這個現象。因此仔細研究了一下，特別和 Nexus One 的 logcat 訊息比對。發覺問題出在 hardware/alsa_sound。因為它沒有 enable WITH_A2DP 這個 flag。</p>
<p>向 <a href="http://review.source.android.com">review.source.android.com</a> 提交了<a href="http://review.source.android.com/15209">這個 patch</a>。今天下午收到通知，已經被 approved 並加到 master branch 了。</p>
<p>值得一提的是，只有用 alsa 介面的 Android 系統才會受此 bug 的影響。很多 Android 手機都並非透過 alsa 介面來控制音效，因此沒這個問題。也難怪這個 bug 一直沒被注意?</p>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/06/eclair-bluetooth-a2dp-fix/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android 2.2 Froyo 釋出?</title>
		<link>http://cwhuang.info/2010/05/android-2-2-froyo-releas</link>
		<comments>http://cwhuang.info/2010/05/android-2-2-froyo-releas#comments</comments>
		<pubDate>Sun, 23 May 2010 07:30:49 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=1054</guid>
		<description><![CDATA[Android 的官網上，已經貼出 Android 2.2 版(代號 Froyo)釋出的消息。新的 Android SDK 也可以下載。看起來 Android 2.2 版有著許多令人欣喜的改進：

新的 Dalvik JIT compiler，較 2.1 版的效能高出 2 至 5 倍。這是遲來的更新，其實從 2.0 版開始 AOSP 的 Dalvik 就有 JIT compiler，只是一直未打開。這次終於預設開啟，想必已經成熟穩定。
瀏覽器加入 V8 Javascript 引擎，使得 Javascript 的效能比 2.1 版高出 2 至 3 倍。
Android Market 的改進，加入錯誤回報機制。開發者可以從用戶那邊，取得程式當掉或卡住的回報。另外可以設定自動更新，以後就不用一個一個的下載程式更新了。
內建無線網路 / USB 共享功能(Tethering &#038; Protable Hotspot)。
支援 Adobe flash，可以從 Android Market 下載。
可將應用程式安裝至 SD 卡。

當然還有更多細部的更新。但光是這幾項，就足夠讓人興奮，非升級不可! [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.android.com">Android 的官網</a>上，已經貼出 Android 2.2 版(代號 Froyo)釋出的消息。新的 Android SDK 也可以下載。看起來 Android 2.2 版有著許多令人欣喜的改進：</p>
<ul>
<li>新的 Dalvik JIT compiler，較 2.1 版的效能高出 2 至 5 倍。這是遲來的更新，其實從 2.0 版開始 AOSP 的 Dalvik 就有 JIT compiler，只是一直未打開。這次終於預設開啟，想必已經成熟穩定。</li>
<li>瀏覽器加入 V8 Javascript 引擎，使得 Javascript 的效能比 2.1 版高出 2 至 3 倍。</li>
<li>Android Market 的改進，加入錯誤回報機制。開發者可以從用戶那邊，取得程式當掉或卡住的回報。另外可以設定自動更新，以後就不用一個一個的下載程式更新了。</li>
<li>內建無線網路 / USB 共享功能(Tethering &#038; Protable Hotspot)。</li>
<li>支援 Adobe flash，可以從 Android Market 下載。</li>
<li>可將應用程式安裝至 SD 卡。</li>
</ul>
<p>當然還有更多細部的更新。但光是這幾項，就足夠讓人興奮，非升級不可! 不過，對我們系統開發者來說，最關心的，還是何時可以拿到 2.2 版的 source code?</p>
<p>還有，到底什麼是 Froyo 呢? 字典裡還查不到這個字哩。稍微 Google 一下，似乎是 Frozen Yogurt (冷凍乳酪)的縮寫。</p>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/05/android-2-2-froyo-releas/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reverse USB tethering</title>
		<link>http://cwhuang.info/2010/05/reverse-usb-tethering</link>
		<comments>http://cwhuang.info/2010/05/reverse-usb-tethering#comments</comments>
		<pubDate>Tue, 18 May 2010 07:16:05 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=1012</guid>
		<description><![CDATA[Tethering 是一種讓手機之類的行動裝置分享上網功能的技術。PC、筆電或其它裝置，可透過 wifi、藍牙或 USB 線，連接到手機，再透過手機的 3G 或 wifi 上網。這是十分方便的一種行動上網技術。可惜的是，Android 系統目前並未內建 tethering 功能(據說，下一版的 Android 2.2 Froyo 將會內建)。所幸，可以安裝第三方軟體，如 android wifi tether 來提供 tethering 的功能。或是改刷 Cyanogenmod ROM，也內建了 USB tethering 的功能。不過，這些動作都需要先取得 root 權限才能進行(也意味著失去保固)。
不過，這篇文章要談的不是如何在 Android 上使用 tethering。網路上已經可以找到許多教學文章了。我要做的是相反的事，也就是讓手機透過 PC 或筆電上網。如果你像我一樣，僅使用 2G sim 卡(因此沒有 3G 上網)，剛好又在沒有 wifi 的環境，這時 reverse tethering 便派得上用場了!
基本上 tethering 的原理很簡單，就是利用 NAT 的功能，其中一端做為 NAT router 負責轉送封包，另一端當 client 將封包送給 router 來達到上網目地。普通的 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Tethering">Tethering</a> 是一種讓手機之類的行動裝置分享上網功能的技術。PC、筆電或其它裝置，可透過 wifi、藍牙或 USB 線，連接到手機，再透過手機的 3G 或 wifi 上網。這是十分方便的一種行動上網技術。可惜的是，Android 系統目前並未內建 tethering 功能(<a href="http://3c.msn.com.tw/View.aspx?ArticleID=45340">據說</a>，下一版的 Android 2.2 Froyo 將會內建)。所幸，可以安裝第三方軟體，如 <a href="http://code.google.com/p/android-wifi-tether">android wifi tether</a> 來提供 tethering 的功能。或是改刷 <a href="http://www.cyanogenmod.com">Cyanogenmod</a> ROM，也內建了 USB tethering 的功能。不過，這些動作都需要先取得 root 權限才能進行(也意味著失去保固)。</p>
<p>不過，這篇文章要談的不是如何在 Android 上使用 tethering。網路上已經可以找到許多教學文章了。我要做的是相反的事，也就是讓手機透過 PC 或筆電上網。如果你像我一樣，僅使用 2G sim 卡(因此沒有 3G 上網)，剛好又在沒有 wifi 的環境，這時 reverse tethering 便派得上用場了!</p>
<p>基本上 tethering 的原理很簡單，就是利用 <a href="http://zh.wikipedia.org/zh-tw/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2">NAT</a> 的功能，其中一端做為 NAT router 負責轉送封包，另一端當 client 將封包送給 router 來達到上網目地。普通的 tethering 是由手機端當 NAT router，PC 端當 client。而本文介紹的 reverse tethering 剛好反過來，由 PC 端當 NAT router，手機做為 client。現代的 Linux 都已內建 NAT 功能，Android 的 kernel 也是 Linux，因此要支援 NAT 並不困難。</p>
<p>我測試的環境如下：Android 手機是 Nexus One，已經改刷 <a href="http://www.mobile01.com/topicdetail.php?f=423&#038;t=1435633&#038;last=17881708">Cyanogenmod 5.0.6-N1</a>。因為這個版本已內建 USB tethering 功能，方便多了。其它的 Android 只要是跑 Cyanogenmod ROM 的應該都可以用。否則的話，可能就要自己重編 kernel，打開 <a href="http://www.netfilter.org">netfilter</a>，並安裝 iptables 等工具程式。</p>
<p>PC 端我跑的是 Fedora Linux 12。基本上任何的 Linux 發行版本應該都可以，但步驟可能略有不同。用 Windows 的話理論上也可以，但我不熟，抱歉啦!</p>
<p>測試方法如下：<span id="more-1012"></span>首先，將手機透過 micro USB 線接上 PC，並將「設定」->「無線與網路」->「Internet tethering」打開。這時，Linux PC 端應該會偵測到一個 <a href="http://en.wikipedia.org/wiki/RNDIS">RNDIS</a> 裝置，並自動載入驅動程式。以我的 Fedora 12 來說，它會載入 usbnet、cdc_ether 和 rndis_host 三個模組。這時以 ifconfig -a 觀察，可以看見多一個 usb0 的網路介面：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
$ <span class="term_command">ifconfig -a</span>
...
usb0      Link encap:Ethernet  HWaddr 2E:9A:43:15:B2:AC
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
</pre>
</td>
</tr>
</tbody>
</table>
<p>手動指定 IP (需用 root)：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
# <span class="term_command">ifconfig usb0 192.168.77.100 up</span>
# <span class="term_command">ifconfig usb0</span>
usb0      Link encap:Ethernet  HWaddr 2E:9A:43:16:51:BC
          inet addr:192.168.77.100  Bcast:192.168.77.255  Mask:255.255.255.0
          inet6 addr: fe80::2c9a:43ff:fe16:51bc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:167 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:639 (639.0 b)  TX bytes:4914 (4.7 KiB)
</pre>
</td>
</tr>
</tbody>
</table>
<p>設定 NAT 的規則：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
# <span class="term_command">iptables -t nat -A POSTROUTING -s 192.168.77.0/24 -j MASQUERADE</span>
# <span class="term_command">iptables -I FORWARD -i usb0 -j ACCEPT</span>
</pre>
</td>
</tr>
</tbody>
</table>
<p>並打開 IP 封包轉送功能(如果先前未曾開啟)：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
# <span class="term_command">sysctl -w net.ipv4.ip_forward=1</span>
</pre>
</td>
</tr>
</tbody>
</table>
<p>直接修改 /etc/sysctl.conf 亦可。</p>
<p>接下來手機端的設定方法是，開啟 Terminal，並執行以下指令：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
$ <span class="term_command">su</span>
# <span class="term_command">busybox route add default gw 192.168.77.100</span>
# <span class="term_command">setprop net.dns1 192.168.77.100</span>
# <span class="term_command">ping -c 3 dns.hinet.net</span>
PING dns.hinet.net (168.95.1.1) 56(84) bytes of data.
64 bytes from dns.hinet.net (168.95.1.1): icmp_seq=1 ttl=242 time=5.04 ms
64 bytes from dns.hinet.net (168.95.1.1): icmp_seq=2 ttl=242 time=5.43 ms
64 bytes from dns.hinet.net (168.95.1.1): icmp_seq=3 ttl=241 time=6.11 ms

--- dns.hinet.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 5.049/5.534/6.118/0.450 ms
</pre>
</td>
</tr>
</tbody>
</table>
<p>這邊是將 DNS 設定成我 PC 端的 IP，因為我的 Linux PC 本身就有跑 DNS server。若沒有的話，可以改設其它公用的 DNS，例如 168.95.1.1。最後一行 ping 是測試，若成功的話，就表示手機可以上網了!</p>
<p>我測試的結果，大多數的上網程式都可以使用，包括瀏覽器、Google Maps、Facebook、Android Market、天氣新聞、Gmail等。只是在 Market 要下載更新時卻卡住下不來。不確定是我的問題還是 Google 那邊的問題，因為有時我用 wifi 上網去下載 Market 程式時也會卡住。目前唯一不能用的是 Youtube 播放器，它拒絕承認有可用的網路存在。</p>
<p>如果以上手動操作成功了，可以考慮將流程自動化。在 PC 端，可以設定 <a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">udev</a> 規則，如此插上 micro USB 接線時，便會自動設定 PC 端的 IP。我的方法是建立 /etc/udev/rules.d/70-usb0.rules，內容如下：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
ACTION=="add", SUBSYSTEM=="net", INTERFACE="usb*", \
  RUN+="/sbin/ifconfig $env{INTERFACE} 192.168.77.100 netmask 255.255.255.0 broadcast 192.168.77.255 up"
ACTION=="remove", SUBSYSTEM=="net", INTERFACE="usb*", \
  RUN+="/sbin/ifconfig $env{INTERFACE} down"
</pre>
</td>
</tr>
</tbody>
</table>
<p>第二段的 ACTION remove 也許不需要，理論上 USB 線拔掉後 usb0 自動就消失了。</p>
<p>至於手機端因打字不易，可以把要輸入的指令，寫成一個 script：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
#!/system/xbin/ash
busybox ifconfig -a
busybox route add default gw 192.168.77.100
setprop net.dns1 192.168.77.100
getprop | grep dns
busybox route -n
ping -c 1 192.168.77.100
ping -c 1 168.95.1.1
ping -c 3 dns.hinet.net
</pre>
</td>
</tr>
</tbody>
</table>
<p>最後三行以 ping 測試，若都成功，表示手機可以正常上網了。這可以在 PC 上輸入，存成一個檔叫 te。然後用 adb 上傳到手機：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
$ <span class="term_command">adb push te /data/local/bin/te</span>
</pre>
</td>
</tr>
</tbody>
</table>
<p>其中 /data/local/bin 在 Cyanogenmod 內建的 PATH 中，因此要執行的話，打 te 就可以了。若沒有這個目錄，要先手動建立。</p>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/05/reverse-usb-tethering/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OESF Android Steps Ahead 2010/Tokyo</title>
		<link>http://cwhuang.info/2010/04/oesf-android-steps-ahead-2010-at-tokyo</link>
		<comments>http://cwhuang.info/2010/04/oesf-android-steps-ahead-2010-at-tokyo#comments</comments>
		<pubDate>Fri, 23 Apr 2010 09:55:33 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android-x86]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=989</guid>
		<description><![CDATA[OESF 在日本東京舉行的 Android Steps Ahead 研討會已順利結束。Android-x86 在 technical track 分享了我們的開發經驗和成果，獲得不少回響。還意外見到了 Android-x86 在日本的一位開發者 Kinneko，他曾貢獻自動掃瞄硬體裝置並載入驅動程式的功能給 Android-x86 。能夠親眼見到各位業界先進，以及各種基於 Android 而開發的產品，更感到 Android 的潛力無限。這是此行的最大收獲。
在此特別感謝邀請 Android-x86 與會的 OESF 台灣辦公室 Tad 先生，以及在演講會場負責日文口譯的 Mika 川口美香小姐。藉由他們的幫助，使得 Android-x86 計劃能夠在國際發聲，並使當地聽眾更了解 Android-x86。
這裡有一個短片，是由 OESF future system working group 所製作，勾畫出將來 Android 系統可能深入我們的家庭和生活。
以下是一些照片的分享：
OESF 的主席進行演講

主會議廳

技術演講會議室，坐無虛席

Android-x86 的展示攤位

Android 電子書

在 Nexus One 上打 SIP 網路電話

Android 的 SIP 影像電話

跑 Android 的音響

最小的 Android 裝置，麻雀雖小，五臟俱全

一個有趣的展示：以 Android 手機透過藍牙搖控 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oesf.jp/en">OESF</a> 在日本東京舉行的 <a href="http://www.oesf.jp/modules/activity/index.php?content_id=24">Android Steps Ahead 研討會</a>已順利結束。Android-x86 在 technical track 分享了我們的開發經驗和成果，獲得不少回響。還意外見到了 Android-x86 在日本的一位開發者 Kinneko，他曾貢獻自動掃瞄硬體裝置並載入驅動程式的功能給 Android-x86 。能夠親眼見到各位業界先進，以及各種基於 Android 而開發的產品，更感到 Android 的潛力無限。這是此行的最大收獲。</p>
<p>在此特別感謝邀請 Android-x86 與會的 OESF 台灣辦公室 Tad 先生，以及在演講會場負責日文口譯的 Mika 川口美香小姐。藉由他們的幫助，使得 Android-x86 計劃能夠在國際發聲，並使當地聽眾更了解 Android-x86。</p>
<p>這裡有一個<a href="http://www.oesf.jp/media/video/fswg_concept.wmv">短片</a>，是由 OESF future system working group 所製作，勾畫出將來 Android 系統可能深入我們的家庭和生活。</p>
<p>以下是一些照片的分享：<span id="more-989"></span></p>
<p>OESF 的主席進行演講
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=535" title="OESF Chairman"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=535&amp;g2_serialNumber=1" width="640" height="480" id="IFid13" class="ImageFrame_none" alt="OESF Chairman"/></a></div>
<p>主會議廳
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=537" title="Keynote track room"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=537&amp;g2_serialNumber=1" width="640" height="480" id="IFid14" class="ImageFrame_none" alt="Keynote track room"/></a></div>
<p>技術演講會議室，坐無虛席
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=539" title="Technical track room"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=539&amp;g2_serialNumber=1" width="640" height="480" id="IFid15" class="ImageFrame_none" alt="Technical track room"/></a></div>
<p>Android-x86 的展示攤位
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=541" title="Android-x86 booth"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=541&amp;g2_serialNumber=1" width="640" height="480" id="IFid16" class="ImageFrame_none" alt="Android-x86 booth"/></a></div>
<p>Android 電子書
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=543" title="Android e-book reader"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=543&amp;g2_serialNumber=1" width="480" height="640" id="IFid17" class="ImageFrame_none" alt="Android e-book reader"/></a></div>
<p>在 Nexus One 上打 SIP 網路電話
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=545" title="SIP call on Android phones"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=545&amp;g2_serialNumber=1" width="640" height="480" id="IFid18" class="ImageFrame_none" alt="SIP call on Android phones"/></a></div>
<p>Android 的 SIP 影像電話
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=547" title="Android VoIP phone "><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=547&amp;g2_serialNumber=1" width="640" height="480" id="IFid19" class="ImageFrame_none" alt="Android VoIP phone "/></a></div>
<p>跑 Android 的音響
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=549" title="Android sound equipment"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=549&amp;g2_serialNumber=1" width="640" height="480" id="IFid20" class="ImageFrame_none" alt="Android sound equipment"/></a></div>
<p>最小的 Android 裝置，麻雀雖小，五臟俱全
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=551" title="A tiny Android device"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=551&amp;g2_serialNumber=1" width="640" height="480" id="IFid21" class="ImageFrame_none" alt="A tiny Android device"/></a></div>
<p>一個有趣的展示：以 Android 手機透過藍牙搖控 Android 機器人
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=553" title="An Android robot controlled by an Android phone"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=553&amp;g2_serialNumber=1" width="640" height="480" id="IFid22" class="ImageFrame_none" alt="An Android robot controlled by an Android phone"/></a></div>
<p>休息時間，展示廳人山人海。乾杯吧!
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=555" title="The beer time"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=555&amp;g2_serialNumber=1" width="640" height="480" id="IFid23" class="ImageFrame_none" alt="The beer time"/></a></div>
<p>Mika 小姐和 Tad 先生
<div class="wpg2tag-image"><a href="http://cwhuang.info/wpg2?g2_itemId=557" title="d13"><img src="http://cwhuang.info/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=557&amp;g2_serialNumber=1" width="640" height="480" id="IFid24" class="ImageFrame_none" alt="d13"/></a></div>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/04/oesf-android-steps-ahead-2010-at-tokyo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.oesf.jp/media/video/fswg_concept.wmv" length="111102253" type="video/x-ms-wmv" />
		</item>
		<item>
		<title>Google 的小禮物</title>
		<link>http://cwhuang.info/2010/03/a-small-gift-from-google</link>
		<comments>http://cwhuang.info/2010/03/a-small-gift-from-google#comments</comments>
		<pubDate>Wed, 03 Mar 2010 15:55:38 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android-x86]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=877</guid>
		<description><![CDATA[一個多月前收到關於 Google Android Developer Lab 的消息。那時幾乎已經是報名的最後一天，趕緊上網填了資料寄出。過年前就收到通知，我得到參加的資格。也沒多想，直接記在行事曆當中。
今天就是這個 Developer Lab 在台北舉辦的日子。不過事情很多，加上這個會議從中午 12 點半就開始，連午飯都來不及吃。其實一開始有點不太想去。但為了有機會和 Android 開發者近距離接觸，還是決定參加。還好去了，否則可就後悔莫及。
報到時，領到一張綠色貼紙，被要求貼在胸前。我不是很喜歡在身上亂貼東西，不過還是照辦了。遇到在台北 Google 工作的朋友，他告訴我，等會將發小禮物。我問每個人都有嗎? 要是用抽獎的，我一定抽不到啦。他說是的，每個人都有。我心想 Google 給的禮物應該不會太差吧? 但了不起就是 T-恤之類的紀念品吧?
想不到，Google 的這個禮物還真不小哩! 接近中場休息時，台上的講者宣佈，Google 將贈送每位參加者一支 Android 手機。因為是用英文講的，我還以為我聽錯了。直到主持人用中文再宣佈一次，並要大家到外面排隊領手機，我們才知道這不是在開玩笑。工作人員在我們胸前的綠色貼紙上蓋了章。而我們拿到手的，竟然就是我哈很久的，最新的 Google Android 手機 Nexus One。市價將近台幣兩萬元，Google 一口氣就送出兩三百支，真是大手筆呀! 現場看過去，每個人都是眉開眼笑。雖然有個人告訴我，他才剛買了一支，不到一個月，真是冤枉。我笑說早買早享受嘛，何況你還可以賣掉!
接下來的議程 Android 開發者在講解 Android 2.1 SDK 的新特色，例如 live wallpaper 的製作方式。不過說實在的，我們大都沒心情聽，只在把玩手上的小禮物。由於會場的電源插座不夠，我只能用 USB 線連接 Eee PC 充電。所謂拿人的手短，本來還想罵罵 Google 的，也暫時先封口囉&#8230; :p
唯一的副作用是，回到家後，老婆看了也很心動，看起來很想再敗一支的樣子。我警告她別衝動，免得我的卡要遭殃&#8230;
本來要寫開箱文的。不過看起來有人動作很快，已經寫了。我就偷懶一下。想看照片的請自行跳轉過去吧&#8230;
新聞也報出來了：

Google送台灣Android開發者Nexus One手機
Google台灣開發者大會 每人送一支Nexus One

不過現場有歡呼聲嗎? 我記得是沒有啦。因為剛宣佈時，大家都是一副不可置信的表情，還以為是在作夢哩!
]]></description>
			<content:encoded><![CDATA[<p>一個多月前收到關於 <a href="http://sites.google.com/site/androiddevlabs/home">Google Android Developer Lab</a> 的消息。那時幾乎已經是報名的最後一天，趕緊上網填了資料寄出。過年前就收到通知，我得到參加的資格。也沒多想，直接記在行事曆當中。</p>
<p>今天就是這個 Developer Lab 在台北舉辦的日子。不過事情很多，加上這個會議從中午 12 點半就開始，連午飯都來不及吃。其實一開始有點不太想去。但為了有機會和 Android 開發者近距離接觸，還是決定參加。還好去了，否則可就後悔莫及。</p>
<p>報到時，領到一張綠色貼紙，被要求貼在胸前。我不是很喜歡在身上亂貼東西，不過還是照辦了。遇到在台北 Google 工作的朋友，他告訴我，等會將發小禮物。我問每個人都有嗎? 要是用抽獎的，我一定抽不到啦。他說是的，每個人都有。我心想 Google 給的禮物應該不會太差吧? 但了不起就是 T-恤之類的紀念品吧?</p>
<p>想不到，Google 的這個禮物還真不小哩! 接近中場休息時，<span id="more-877"></span>台上的講者宣佈，Google 將贈送每位參加者一支 Android 手機。因為是用英文講的，我還以為我聽錯了。直到主持人用中文再宣佈一次，並要大家到外面排隊領手機，我們才知道這不是在開玩笑。工作人員在我們胸前的綠色貼紙上蓋了章。而我們拿到手的，竟然就是我哈很久的，最新的 Google Android 手機 <a href="http://www.google.com/phone">Nexus One</a>。市價將近台幣兩萬元，Google 一口氣就送出兩三百支，真是大手筆呀! 現場看過去，每個人都是眉開眼笑。雖然有個人告訴我，他才剛買了一支，不到一個月，真是冤枉。我笑說早買早享受嘛，何況你還可以賣掉!</p>
<p>接下來的議程 Android 開發者在講解 Android 2.1 SDK 的新特色，例如 live wallpaper 的製作方式。不過說實在的，我們大都沒心情聽，只在把玩手上的小禮物。由於會場的電源插座不夠，我只能用 USB 線連接 Eee PC 充電。所謂拿人的手短，本來還想<a href="/?p=795">罵罵 Google</a> 的，也暫時先封口囉&#8230; :p</p>
<p>唯一的副作用是，回到家後，老婆看了也很心動，看起來很想再敗一支的樣子。我警告她別衝動，免得我的卡要遭殃&#8230;</p>
<p>本來要寫開箱文的。不過看起來有人動作很快，已經寫了。我就偷懶一下。想看照片的請自行<a href="http://bestand.blog.ithome.com.tw/post/3649/67736">跳轉</a>過去吧&#8230;</p>
<p>新聞也報出來了：</p>
<ul>
<li><a href="http://www.ithome.com.tw/itadm/article.php?c=59850">Google送台灣Android開發者Nexus One手機</a></li>
<li><a href="http://www.zdnet.com.tw/news/ce/0,2000085674,20144435,00.htm">Google台灣開發者大會 每人送一支Nexus One</a></li>
</ul>
<p>不過現場有歡呼聲嗎? 我記得是沒有啦。因為剛宣佈時，大家都是一副不可置信的表情，還以為是在作夢哩!</p>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/03/a-small-gift-from-google/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>將 native libraries 加入 AOSP 的編譯</title>
		<link>http://cwhuang.info/2010/02/compile-native-libraries-with-aosp</link>
		<comments>http://cwhuang.info/2010/02/compile-native-libraries-with-aosp#comments</comments>
		<pubDate>Sun, 14 Feb 2010 19:22:54 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android-x86]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=842</guid>
		<description><![CDATA[上篇介紹用 Android SDK 和 NDK 來編譯含 JNI 的 Android 應用程式。但若是已有 Android (或 Android-x86)的 source tree，可能就不會再想安裝 SDK 和 NDK。因為 AOSP tree 本身就包含完整的 SDK 和 NDK。那麼是不是可以將含有 native libraries 的應用程式，加入到 AOSP 的 build system 中編譯? 這麼做還有一個更重要的理由，就是把你的應用程式和 AOSP 的源碼結合在一起，用單一步驟就可以完成所有的編譯。這樣有助於維護單一而自我包含(self-contained)的源碼。
答案當然是肯定的。經過一番嘗試後，發現只要稍微修改一下應用程式的 Android.mk 就行。具體的做法如下：
首先，將應用程式的目錄搬到 AOSP tree 的 packages/apps/ 目錄下。例如 packages/apps/hello。
再來，建立 packages/apps/hello/Android.mk，內容如下：





$(call build-package)

LOCAL_PATH:= $(LOCAL_PATH)/jni
include $(CLEAR_VARS)

LOCAL_MODULE := libhello
LOCAL_SRC_FILES := hello.c
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES :=

include $(BUILD_SHARED_LIBRARY)





這個 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/?p=840">上篇</a>介紹用 Android SDK 和 NDK 來編譯含 <a href="http://en.wikipedia.org/wiki/Java_Native_Interface">JNI</a> 的 Android 應用程式。但若是已有 Android (或 Android-x86)的 source tree，可能就不會再想安裝 SDK 和 NDK。因為 AOSP tree 本身就包含完整的 SDK 和 NDK。那麼是不是可以將含有 native libraries 的應用程式，加入到 AOSP 的 build system 中編譯? 這麼做還有一個更重要的理由，就是把你的應用程式和 AOSP 的源碼結合在一起，用單一步驟就可以完成所有的編譯。這樣有助於維護單一而自我包含(self-contained)的源碼。</p>
<p>答案當然是肯定的。經過一番嘗試後，發現只要稍微修改一下應用程式的 Android.mk 就行。具體的做法如下：</p>
<p>首先，將應用程式的目錄搬到 AOSP tree 的 packages/apps/ 目錄下。例如 packages/apps/hello。</p>
<p>再來，建立 packages/apps/hello/Android.mk，內容如下：<span id="more-842"></span></p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
$(call build-package)

LOCAL_PATH:= $(LOCAL_PATH)/jni
include $(CLEAR_VARS)

LOCAL_MODULE := libhello
LOCAL_SRC_FILES := hello.c
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES :=

include $(BUILD_SHARED_LIBRARY)
</pre>
</td>
</tr>
</tbody>
</table>
<p>這個 Android.mk 包含了兩部分。第一部分是編譯 java code 產生 apk，這是由 build-package macro 所完成。這個 macro 是 Android-x86 加入的。若你用的是原始的 Google AOSP 並沒有此 macro。不過用原本的 Android build system 規則，直接指定 LOCAL_PACKAGE_NAME、LOCAL_SRC_FILES 等變數也可以。</p>
<p>第二部分就是 native libraries 的編譯規則。其中有幾個和 NDK 裡 Android.mk 不同的地方值得注意。一是要在 LOCAL_C_INCLUDES 指定 nativehelper 目錄的位置。否則的話，就要修改源碼中的 #include &lt;jni.h&gt; 成為 #include &lt;nativehelper/jni.h&gt;，不然會找不到 jni.h。另一個不同的地方是，若原本在 LOCAL_LDLIBS 指定 link 了其它的 libraries，要改成用 LOCAL_SHARED_LIBRARIES 來指定用 AOSP 的 libraries。以 san-angeles 這個 sample 為例，它原本是</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog
</pre>
</td>
</tr>
</tbody>
</table>
<p>必須改為</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
LOCAL_SHARED_LIBRARIES := libGLESv1_CM liblog
</pre>
</td>
</tr>
</tbody>
</table>
<p>還有一點不同是，LOCAL_MODULE 一定要以 lib 開頭(上例就是 libhello)。不像 NDK 的 Android.mk 裡，好像用 hello 或 libhello 都行。</p>
<p>這樣子照原本編譯 AOSP 的方法，就可以編出包含此應用程式的 image 了。不過和 NDK 不同的是，它的 shared libraries 是放進 /system/lib 裡，apk 裡並不包含 .so 檔(可以用 unzip 解開來看)。</p>
<p>參考：</p>
<ul>
<li><a href="http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/403">Android Native code 不用 NDK</a></li>
</ul>
<p>如果有人有更好的做法，歡迎分享。</p>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/02/compile-native-libraries-with-aosp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>建立使用 JNI 的 Android 應用程式</title>
		<link>http://cwhuang.info/2010/02/create-jni-apk</link>
		<comments>http://cwhuang.info/2010/02/create-jni-apk#comments</comments>
		<pubDate>Sat, 13 Feb 2010 17:36:49 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=840</guid>
		<description><![CDATA[一般要建立 Android 的應用程式使用 Eclipse + ADT 最為方便。不過若是像我一樣慣用 command line 的人，可能會希望直接用指令完成。這可利用 Android SDK 和 NDK 辦到。
首先，用 SDK 的 android 指令建立一個 project：





$ android create project -t android-4 -k app.hello -a HelloActivity -p apps/hello/project





其中的參數：

-t 指定 Android API level，android-4 代表 Android 1.6 版。
-k 代表 package namespace。
-a 代表 Activity 的名稱。
-p 代表 project 的放置路徑。


再來，建立 apps/hello/project/jni/ 目錄，並將你的 C/C++ code 放置於此。然後建立 apps/hello/project/jni/Android.mk 內容類似如下：





LOCAL_PATH [...]]]></description>
			<content:encoded><![CDATA[<p>一般要建立 Android 的應用程式使用 <a href="/?p=116">Eclipse + ADT</a> 最為方便。不過若是像我一樣慣用 command line 的人，可能會希望直接用指令完成。這可利用 <a href="http://developer.android.com/sdk/index.html">Android SDK</a> 和 <a href="http://developer.android.com/sdk/ndk/1.6_r1/index.html">NDK</a> 辦到。</p>
<p>首先，用 SDK 的 android 指令建立一個 project：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
$ <span class="term_command">android create project -t android-4 -k app.hello -a HelloActivity -p apps/hello/project</span>
</pre>
</td>
</tr>
</tbody>
</table>
<p>其中的參數：</p>
<ul>
<li>-t 指定 <a href="http://developer.android.com/guide/appendix/api-levels.html">Android API level</a>，android-4 代表 Android 1.6 版。</li>
<li>-k 代表 package namespace。</li>
<li>-a 代表 <a href="http://developer.android.com/reference/android/app/Activity.html">Activity</a> 的名稱。</li>
<li>-p 代表 project 的放置路徑。</li>
</ul>
<p><span id="more-840"></span><br />
再來，建立 apps/hello/project/jni/ 目錄，並將你的 C/C++ code 放置於此。然後建立 apps/hello/project/jni/Android.mk 內容類似如下：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := libhello
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)
</pre>
</td>
</tr>
</tbody>
</table>
<p>其中 LOCAL_MODULE 就是 native shared library 的名稱，而 LOCAL_SRC_FILES 裡應列出這個 library 的所有 C/C++ 源碼。</p>
<p>再來建立 apps/hello/Application.mk 如下：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES      := hello
</pre>
</td>
</tr>
</tbody>
</table>
<p>如此就可以透過 NDK 和 <a href="http://ant.apache.org">Ant</a> 來編譯，產生 apk 了：</p>
<table class="term">
<tbody>
<tr>
<td class="term">
<pre class="term_text">
$ <span class="term_command">make -jX V=1 APP=hello</span>
$ <span class="term_command">ant -f apps/hello/project/build.xml debug</span>
</pre>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/02/create-jni-apk/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android 還是開放源碼計劃嗎?</title>
		<link>http://cwhuang.info/2010/01/is-android-still-an-open-source-project</link>
		<comments>http://cwhuang.info/2010/01/is-android-still-an-open-source-project#comments</comments>
		<pubDate>Sun, 10 Jan 2010 15:59:04 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android-x86]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=795</guid>
		<description><![CDATA[關注 Android 開放源碼計劃(AOSP)的朋友應該會注意到，在 Google 的嚴密掌控下，Android 已經離開放源碼社群愈來愈遠。雖然形式上 Android 的確符合開放源碼的定義。但本質上，它是不折不扣的 Google 計劃，而非一個社群的計劃。從幾件事情上可以看出這樣的傾向：

Android 2.0 完全沒有發展歷程(git log / history)。
其實根本沒有 Android 2.0 的源碼。目前 AOSP 上的版本是介於 2.0 到 2.0.1 之間的一個 &#8220;snapshot&#8221;。更遑論即將上市的所謂 2.1 版了。
絕大部分社群送上去的 patches 都被忽略。從 eclair 之後似乎僅有五個 patches 被接受而已。
Project roles 頁面被修改，移掉大部分讓社群參與的字眼 (剛好被人抓包，把舊的頁面 diff 呈現在此)。
Google 的工程師不在 android.git.kernel.org 上工作。
愈來愈多衍生的開放源碼計劃(android-x86, embinux, 0xdroid, rowboat, odroid, &#8230;)，代表許多社群開發者已受不了 Google 的態度。

誠心的建議，Google 應該捫心自問，當初決定開放源碼的初衷是什麼? 到底要走向開放的市集模式，擁抱社群，還是走回更封閉的教堂模式，關起門來自己搞?
如果決定擁抱社群，便應該回歸開放源碼開發模式的基本精神，「儘早釋出、儘快釋出」，讓更多人有機會檢視 Android 的最新源碼，因為「在眾人面前，所有的錯誤都是淺顯的」(Linus 定律)。同時更應重視社群的力量，儘快的 review 社群所提出的修改建議，絕不可放著幾個月都不理。這樣有心貢獻的人心早涼了! [...]]]></description>
			<content:encoded><![CDATA[<p>關注 Android 開放源碼計劃(AOSP)的朋友應該會注意到，在 Google 的嚴密掌控下，Android 已經離開放源碼社群愈來愈遠。雖然形式上 Android 的確符合開放源碼的定義。但本質上，它是不折不扣的 Google 計劃，而非一個社群的計劃。從幾件事情上可以看出這樣的傾向：</p>
<ul>
<li>Android 2.0 完全沒有發展歷程(git log / history)。</li>
<li>其實根本沒有 Android 2.0 的源碼。目前 AOSP 上的版本是<a href="http://groups.google.com/group/android-platform/browse_thread/thread/93eaaf9ac90cbfab/da1a2c36a362a148">介於 2.0 到 2.0.1 之間</a>的一個 &#8220;snapshot&#8221;。更遑論即將上市的所謂 2.1 版了。</li>
<li>絕大部分社群送上去的 patches 都被忽略。從 eclair 之後似乎僅有五個 patches 被接受而已。</li>
<li>Project roles 頁面被修改，移掉大部分讓社群參與的字眼 (剛好被人抓包，把<a href="http://g1files.webs.com/AndroidProjectDiff.html">舊的頁面 diff 呈現在此</a>)。</li>
<li>Google 的工程師不在 <a href="http://android.git.kernel.org">android.git.kernel.org</a> 上工作。</li>
<li>愈來愈多衍生的開放源碼計劃(android-x86, embinux, 0xdroid, rowboat, odroid, &#8230;)，代表許多社群開發者已受不了 Google 的態度。</li>
</ul>
<p>誠心的建議，Google 應該捫心自問，當初決定開放源碼的初衷是什麼? 到底要走向開放的市集模式，擁抱社群，還是走回更封閉的教堂模式，關起門來自己搞?</p>
<p>如果決定擁抱社群，便應該回歸開放源碼開發模式的基本精神，「儘早釋出、儘快釋出」，讓更多人有機會檢視 Android 的最新源碼，因為「在眾人面前，所有的錯誤都是淺顯的」(Linus 定律)。同時更應重視社群的力量，儘快的 review 社群所提出的修改建議，絕不可放著幾個月都不理。這樣有心貢獻的人心早涼了! 唯有在對的方向做對的事情，才能讓開放源碼的輪子順利轉動，帶起 Android 開放社群的蓬勃進步。</p>
<p>明天下午有機會應邀到台灣 Google 演講，正好把這些觀點與 Google 的工程師討論討論。投影片已公開在 <a href="http://docs.android-x86.org">Google docs</a> 上：<br />
<iframe src="http://docs.google.com/present/embed?id=dd7z9dh6_7f2sbh6dg&#038;size=m" frameborder="0" width="555" height="451"></iframe></p>
<p>參考：</p>
<ul>
<li><a href="http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/397">Android 不是那麼開放</a></li>
<li><a href="http://groups.google.com/group/android-platform/browse_thread/thread/24b933012a2d28f4/d37c89a6151ec6e4">AOSP 週年慶</a>&#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2010/01/is-android-still-an-open-source-project/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>澄清：Androidx86 與 Android-x86.org 無關</title>
		<link>http://cwhuang.info/2009/12/androidx86-is-not-android-x86-org</link>
		<comments>http://cwhuang.info/2009/12/androidx86-is-not-android-x86-org#comments</comments>
		<pubDate>Thu, 17 Dec 2009 03:17:12 +0000</pubDate>
		<dc:creator>cwhuang</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android-x86]]></category>

		<guid isPermaLink="false">http://cwhuang.info/?p=742</guid>
		<description><![CDATA[說實話，這個站出現得比我們的 Android-x86 計劃還早，而且先前有很長一段時間沒有更新了。不過，最近這個站又做了大幅度的改版，並加上很多取自本計劃的資料，甚至在下載區還放了我們的 iso 檔(雖然註明了出處)。這是沒關係，但他們還放了一個 Donate 的圖示，但點下去的連結，並非連到本計劃的捐款網頁。這不禁讓人懷疑，這個站的動機不單純!
在此特別澄清，這個網站 androidx86.org (以及 androidx86.com) 與 Android-x86 開放源碼計劃(Android-x86.org)沒有任何關連。
]]></description>
			<content:encoded><![CDATA[<p>說實話，<a href="http://androidx86.org">這個站</a>出現得比我們的 Android-x86 計劃還早，而且先前有很長一段時間沒有更新了。不過，最近這個站又做了大幅度的改版，並加上很多取自本計劃的資料，甚至在下載區還放了我們的 iso 檔(雖然註明了出處)。這是沒關係，但他們還放了一個 Donate 的圖示，但點下去的連結，並非連到本計劃的捐款網頁。這不禁讓人懷疑，這個站的動機不單純!</p>
<p>在此特別澄清，這個網站 androidx86.org (以及 androidx86.com) 與 Android-x86 開放源碼計劃(Android-x86.org)沒有任何關連。</p>
]]></content:encoded>
			<wfw:commentRss>http://cwhuang.info/2009/12/androidx86-is-not-android-x86-org/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
