<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2365388541401490643</id><updated>2011-12-09T03:36:58.543-08:00</updated><category term='Android BatteryService fix for X86'/><category term='Android mouse cursor'/><category term='G1 adb connection'/><category term='Android shared library'/><category term='Android native service'/><title type='text'>Test drive</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-3518477266817173663</id><published>2009-12-26T15:51:00.000-08:00</published><updated>2009-12-26T15:57:20.048-08:00</updated><title type='text'>Ethernet support for Eclair</title><content type='html'>I have created two patches for Ethernet support in Eclair. I don't want to check them in until I finish a complete test. For the early access, you can download it from the download section in android-x86.org&lt;br /&gt;&lt;br /&gt;BTW--Chih-wei has also posted a nice video on youtube to demonstrate a really fast fastboot of Android-x86 on EeePC 901. You can find the video from http://www.youtube.com/watch?v=QeSg7S&lt;br /&gt;&lt;br /&gt;Yi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-3518477266817173663?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/3518477266817173663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/12/ethernet-support-for-eclair.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3518477266817173663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3518477266817173663'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/12/ethernet-support-for-eclair.html' title='Ethernet support for Eclair'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-8753394710449913356</id><published>2009-11-14T18:16:00.001-08:00</published><updated>2009-11-14T18:19:18.378-08:00</updated><title type='text'>release of android-x86 20091113 test build</title><content type='html'>The Android-x86 project is glad to announce a new test build&lt;br /&gt;20091113 for public testing. A live cd ISO and USB image are&lt;br /&gt;available from our site:&lt;br /&gt;&lt;br /&gt;   http://www.android-x86.org/download&lt;br /&gt;   http://code.google.com/p/android-x86/downloads/list&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;Build 20091113 is Android 1.6 (Donut) based and it is a release candidate for android-x86 1.6 stable release.&lt;br /&gt;In addition to the features available in previous release, the new build contains&lt;br /&gt;&lt;br /&gt;   * Hardware OpenGL support from olv in 0xlab.&lt;br /&gt;   * Fn key support for EeePC platforms.&lt;br /&gt;   * External USB bluetooth support.&lt;br /&gt;   * NDK for X86 platforms is supported (based on the original work from guillaume.etievent@laposte.net)&lt;br /&gt;   * new touch features to simulate home/menu/back keys to support touch only device.&lt;br /&gt;   * Improvement on the keyboard support. User can use ctrl+c directly from terminal simulator now.&lt;br /&gt;   * A lots of bug fixes.&lt;br /&gt;&lt;br /&gt;Released Files:&lt;br /&gt;   * Live CD iso: android-x86-20091113.iso&lt;br /&gt;&lt;br /&gt;     sha1sum:  dec0b99a6fe1e33e05b665e82f3020f612eb14bf&lt;br /&gt;&lt;br /&gt;   * Live USB image: android-x86-20091113_usb.img.gz&lt;br /&gt;&lt;br /&gt;     sha1sum:  ce040ced2da92c278c7df2527b5f3498a68afbfa&lt;br /&gt;&lt;br /&gt;Source code:&lt;br /&gt; The source code is available in our git server:&lt;br /&gt;&lt;br /&gt;   $ repo init -u git://git.android-x86.org/android-x86/platform/manifest.git&lt;br /&gt;   $ repo sync&lt;br /&gt;&lt;br /&gt;Test reports (success or fail) are welcome.&lt;br /&gt;Please send the reports to the Android-x86 discussion group.&lt;br /&gt;http://groups.google.com/group/android-x86&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-8753394710449913356?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/8753394710449913356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/11/release-of-android-x86-20091113-test.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/8753394710449913356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/8753394710449913356'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/11/release-of-android-x86-20091113-test.html' title='release of android-x86 20091113 test build'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-1469960313718220779</id><published>2009-10-08T09:49:00.000-07:00</published><updated>2009-10-08T10:04:44.467-07:00</updated><title type='text'>compile openssl for mingw</title><content type='html'>I was googling a correct step to build openssl with mingw.  I followed different posts from different people, none of them give me anything good. After a whole afternoon of  trying and failing, eventually, I got it right with following steps:&lt;div&gt;1. install cygwin on my PC. To avoid too much trying and failing, I have installed the full cygwin. Storage space is cheap but time is very expensive.&lt;/div&gt;&lt;div&gt;2. install mingw&lt;/div&gt;&lt;div&gt;3. download openssl from openssl.org. I used 0.9.8k&lt;/div&gt;&lt;div&gt;4. untar/unzip 0.9.8k package to cygwin how directory&lt;/div&gt;&lt;div&gt;5. start Cygwin xterm (ya, Cygwin not msys)&lt;/div&gt;&lt;div&gt;6. in the xterm, go to openssl-0.9.8k directory that you just unpacked&lt;/div&gt;&lt;div&gt;7. ./Configure mingw&lt;/div&gt;&lt;div&gt;8. make&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The steps above create static library that can be used with mingw. To create the dll, you need to do:&lt;/div&gt;&lt;div&gt;$ echo EXPORTS &gt; libcrypto.def &lt;/div&gt;&lt;div&gt;$ nm libcrypto.a | grep ' T _' | sed 's,^.* T _,,' &gt;&gt; libcrypto.def &lt;/div&gt;&lt;div&gt;$ dllwrap -o libcrypto.dll --def libcrypto.def libcrypto.a -lws2_32 -lgdi32 &lt;/div&gt;&lt;div&gt; $ echo EXPORTS &gt; libssl.def &lt;/div&gt;&lt;div&gt;$ nm libssl.a | grep 'T _' | sed 's,^.* T _,,' &gt;&gt; libssl.def &lt;/div&gt;&lt;div&gt;$ dllwrap -o libssl.dll --def libssl.def libssl.a libcrypto.dll&lt;/div&gt;&lt;div&gt; After this, you can copy the *.a to /mingw/lib and *.dll to /ming/bin&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-1469960313718220779?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/1469960313718220779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/10/compile-openssl-for-mingw.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/1469960313718220779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/1469960313718220779'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/10/compile-openssl-for-mingw.html' title='compile openssl for mingw'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-2286776124895345654</id><published>2009-09-12T21:52:00.001-07:00</published><updated>2009-09-12T21:52:23.224-07:00</updated><title type='text'>The wifi problem has been fixed</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; "&gt;&lt;div style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; width: auto; font: normal normal normal 100%/normal Georgia, serif; text-align: left; "&gt;Recntly, people reported issues with wifi. The bug really has nothing to do with the wifi. It is a memory corruption issue inside the system property manager. Long ago, I changed the size of system property name to support user configure-able battery sysfs path. This change will cause the size of shared memory for the system properties  to increase. But the original code of shared memory creation uses a hard coded size and I was not aware of that. When the amonut of the total used system property entries increased to certain level, segfault will happen since system property entry may have pointed to a wrong address.  After adjusted the code to create the share memory, it seems that the problem goes away.&lt;div&gt;If you are still seeing the issue, please report it in the discussion group.&lt;/div&gt;&lt;div&gt;Thanks&lt;br /&gt;&lt;div&gt;Yi &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-2286776124895345654?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/2286776124895345654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/09/wifi-problem-has-been-fixed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/2286776124895345654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/2286776124895345654'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/09/wifi-problem-has-been-fixed.html' title='The wifi problem has been fixed'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-1898612653253609773</id><published>2009-09-03T21:47:00.000-07:00</published><updated>2009-09-14T18:53:22.414-07:00</updated><title type='text'>What is next</title><content type='html'>Now, we have a realtivly stable system. Here are some items on my to do list:&lt;div&gt;1. enable vold to support external stroage by using fuzzy matching&lt;/div&gt;&lt;div&gt;2.In Android, by default, mkdir set the new directory permission to 0700. When install an new apk from web ui, the download provider tries to create a new directory called download in /sdcard. On G1 phone, the external storage is using vfat partition. And it does not enforce permission.  So we can download and install the apk without any problem. But with android-x86, the external storage can use either ext2, ext3 or vfat, with the unix paritions, the permission will be enforced. So the apk install will fail. I may need to add new code the fix the permission.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. hardware cursor, this item in my to do list for a very long time already.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-1898612653253609773?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/1898612653253609773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/09/what-is-next.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/1898612653253609773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/1898612653253609773'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/09/what-is-next.html' title='What is next'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-8741937196717053035</id><published>2009-08-25T20:27:00.001-07:00</published><updated>2009-08-25T20:29:23.663-07:00</updated><title type='text'>The Android Etherent State Tracker Cont.</title><content type='html'>Ok, I have committed the first release of the etherent state tracker for the Android. You can check out code from git.android-x86.org by using branch name eth-nm-dev-br. It is an alpha release. Please report the issues to the android-x86 group&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-8741937196717053035?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/8741937196717053035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/08/android-etherent-state-tracker-cont.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/8741937196717053035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/8741937196717053035'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/08/android-etherent-state-tracker-cont.html' title='The Android Etherent State Tracker Cont.'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-3413171310010097081</id><published>2009-08-24T09:49:00.000-07:00</published><updated>2009-08-24T09:51:51.271-07:00</updated><title type='text'>Etherent state tracker cont.</title><content type='html'>Slow.... the build is so slow, it eats up my 50% of time.&lt;br /&gt;&lt;br /&gt;I'm getting there. I still need to clean up the conntectivityservice. This class does now know anything other than wifi and mobile. I need to add etherent into it. But before that I will try out the basic functionality and release a test path .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-3413171310010097081?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/3413171310010097081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/08/etherent-state-tracker-cont.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3413171310010097081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3413171310010097081'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/08/etherent-state-tracker-cont.html' title='Etherent state tracker cont.'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-7723989316084904511</id><published>2009-08-16T22:46:00.001-07:00</published><updated>2009-08-16T22:52:52.006-07:00</updated><title type='text'>Add state tracker for etherent devices</title><content type='html'>Android has state tracker (the connection management) for both mobile connections and wifi connections. But it does not support ethernet devices.&lt;br /&gt;This is not an issue for a phone , but it causes following issues with netbook:&lt;br /&gt;1. you can not manage your ethernet device from UI at all&lt;br /&gt;2. With current way of enabling ethernet device (netcfg eth0 dhcp). If you unplug/plug cable, you will not have your dhcp ip address reset&lt;br /&gt;3. ethernet device can not report connectivity changes correctly&lt;br /&gt;&lt;br /&gt;Now, I'm working on the ethernet state tracker support for Android-x86. This blog thread is created to track this work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-7723989316084904511?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/7723989316084904511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/08/add-state-tracker-for-etherent-devices.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/7723989316084904511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/7723989316084904511'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/08/add-state-tracker-for-etherent-devices.html' title='Add state tracker for etherent devices'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-8302258207736973580</id><published>2009-06-06T23:53:00.000-07:00</published><updated>2009-06-07T00:04:57.863-07:00</updated><title type='text'>How to access a C native service from Java side in Android</title><content type='html'>I have mentioned how to add a native service by C. Now, it is the time to discuss about the client implementation. A client, in this document is a activity. It can talk to the native service to instruct the native service to do something for it.&lt;br /&gt;It seems that there has no way to do this with a standard method supported by Android SDK. So I went to another route. I built a platform library. The platform library talks to the servicemanager.java to access the binder hence the native service. The code is very simple. To find out how to build and use a platform library, you can check out the android source code and take a look at the README.txt in the directory development/samples/PlatformLibrary&lt;br /&gt;&lt;br /&gt;package com.servicelib.mybinder;&lt;br /&gt;&lt;br /&gt;import android.util.Config;&lt;br /&gt;import android.util.Log;&lt;br /&gt;import android.os.ServiceManager;&lt;br /&gt;import android.os.Binder;&lt;br /&gt;import android.os.IBinder;&lt;br /&gt;import android.os.Parcel;&lt;br /&gt;import android.os.RemoteException;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public final class MyBinderLibrary {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    private static IBinder mServiceManager = null;&lt;br /&gt;&lt;br /&gt;    public MyBinderLibrary() {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static IBinder AttachService(String name) {&lt;br /&gt;        if (mServiceManager == null) {&lt;br /&gt;            mServiceManager = ServiceManager.getService(name);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return mServiceManager;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static int SendKillSignal() throws RemoteException&lt;br /&gt;    {&lt;br /&gt;        Parcel data = Parcel.obtain();&lt;br /&gt;        Parcel reply = Parcel.obtain();&lt;br /&gt;    int result;&lt;br /&gt;        try{&lt;br /&gt;            data.writeInterfaceToken(mServiceManager.getInterfaceDescriptor());&lt;br /&gt;            mServiceManager.transact(TRANSACTION_sendKill,data,reply,0);&lt;br /&gt;            reply.readException();&lt;br /&gt;            result = reply.readInt();&lt;br /&gt;        }&lt;br /&gt;        finally{&lt;br /&gt;            reply.recycle();&lt;br /&gt;            data.recycle();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;    static final int TRANSACTION_sendKill = (IBinder.FIRST_CALL_TRANSACTION+0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, in your activity, call the methods in this class directly. So that you can talk to the native service. You need to make sure the name of the service is correct.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-8302258207736973580?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/8302258207736973580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/06/how-to-access-c-native-service-from.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/8302258207736973580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/8302258207736973580'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/06/how-to-access-c-native-service-from.html' title='How to access a C native service from Java side in Android'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-3662145059836595108</id><published>2009-05-29T09:36:00.001-07:00</published><updated>2009-05-29T22:05:43.360-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='G1 adb connection'/><title type='text'>connect G1 phone to adb on Ubuntu</title><content type='html'>You can find very detailed instructions on android page. But they missed one thing, that is adb needs to be run with root permission. So after you setup everything, do:&lt;br /&gt;adb kill-server&lt;br /&gt;sudo adb devices&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-3662145059836595108?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/3662145059836595108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/connect-g1-phone-to-adb-on-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3662145059836595108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3662145059836595108'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/connect-g1-phone-to-adb-on-ubuntu.html' title='connect G1 phone to adb on Ubuntu'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-3935468263040742200</id><published>2009-05-28T22:50:00.000-07:00</published><updated>2009-05-29T22:06:24.824-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android mouse cursor'/><title type='text'>The mouse cursor issue</title><content type='html'>I did the mouse cursor support for X86 platforms. As matter fact, the same change should be able to run anyway.&lt;br /&gt;&lt;br /&gt;But when I try to drag the screen to switch to next screen, I see the screen keeps flicking. It looks like a bug. In order to debug this problem, I wrote a small application to just draw lines on the screen. When I start to draw, I can see the lines keep jumping back to position 0,0 during the  mouse cursor movement . It seems that the mouse cursor keeps sending out wrong mouse position.&lt;br /&gt;After some debugging, I found out that it is cause by the batching mode of mouse event. Current mouse cursor tries to simulate the touch events, in order to do that, I have to convert the rel_x/y to abs_x/y and this conversion was never done for batched events. Because of this, both rel_x/y and abs_x/y are sent with touch events.&lt;br /&gt;I have published the patch to&lt;br /&gt;http://code.google.com/p/patch-hosting-for-android-x86-support/downloads/list&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-3935468263040742200?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/3935468263040742200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/mouse-cursor-issue.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3935468263040742200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/3935468263040742200'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/mouse-cursor-issue.html' title='The mouse cursor issue'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-662493318063153893</id><published>2009-05-22T22:44:00.000-07:00</published><updated>2009-05-22T23:47:48.383-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android native service'/><title type='text'>How to write Android native service by C contntinue</title><content type='html'>Here is some thing I did; first, I copied biner.c to my private directory and used it as a library to access kernel binder driver. And then, I wrote my service to use the functions in binder.c to talk to service manager.&lt;br /&gt;In order to talk with service manager, we need following things:&lt;br /&gt;1. an unique id for the service we are going to build. It is a string16 &lt;br /&gt;2. add permission for our service to service manager.&lt;br /&gt;&lt;br /&gt;For the point 1, I create an uint16 array like&lt;br /&gt;uint16_t svcmgr_id16[] = {&lt;br /&gt;    'B','i','n','d','e','r','.','T','e','s','t','.','I','B','i','n',&lt;br /&gt;    'd','e','r','t','e','s','t'&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;for the point 2, I'm kind of lazy, I add a new item to the allowd[] in servicemanager. It looks like this:&lt;br /&gt;{10001, "Binder.Test.IBindertest"}&lt;br /&gt;&lt;br /&gt;Ok, lets get something real, we need to do following steps to make everything to work:&lt;br /&gt;1. connect to the binder by calling binder_open function.  The binder_open function creates a shared memory with /dev/binder. I copied service manager code to create a 128K shared memory.&lt;br /&gt;2.create an io block through bio_init function to talk with service manager through binder. You need to provide a buff to bio_init. I use an integer array with size of 128&lt;br /&gt;3. fill in the target (servicemanager) and source(Binder.Test.IBindertest) by calling bio_put_string16_x&lt;br /&gt;4. call binder_call with command SVC_MGR_ADD_SERVICE. It is a blocking call. You need to provide a binder_io object for the result.&lt;br /&gt;5. if binder_call returns 0, call binder_loop with a message handler callback function to process messages sent from service client.&lt;br /&gt;&lt;br /&gt;The message processing callback function:&lt;br /&gt;The prototype of the message processing callback functions is:&lt;br /&gt;static int binder_handler(struct binder_state *bs,&lt;br /&gt;                               struct binder_txn *txn,&lt;br /&gt;                               struct binder_io *msg,&lt;br /&gt;                               struct binder_io *reply)&lt;br /&gt;&lt;br /&gt;In the callback function, we at least need to handle INTERFACE_TRANSACTION so that our service client can find our service.&lt;br /&gt;  switch(txn-&gt;code) {&lt;br /&gt;    case INTERFACE_TRANSACTION:&lt;br /&gt;        bio_put_string16(reply,svcmgr_id16);&lt;br /&gt;        break;&lt;br /&gt;    case &lt;other&gt;:&lt;br /&gt;    default:&lt;br /&gt;          error handling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-662493318063153893?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/662493318063153893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/how-to-write-android-native-service-by_22.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/662493318063153893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/662493318063153893'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/how-to-write-android-native-service-by_22.html' title='How to write Android native service by C contntinue'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-7563010614464213501</id><published>2009-05-18T22:19:00.000-07:00</published><updated>2009-05-18T22:21:08.937-07:00</updated><title type='text'>How to write Android native service by C</title><content type='html'>It is not as hard as I thought before I start. When I look into the frameworks/base/cmds/servicemanager, I realized that it should be an easy job. So I decide to give it a try. I will list what I do after I complete it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-7563010614464213501?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/7563010614464213501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/how-to-write-android-native-service-by.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/7563010614464213501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/7563010614464213501'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/how-to-write-android-native-service-by.html' title='How to write Android native service by C'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-4622495811207243464</id><published>2009-05-12T16:10:00.000-07:00</published><updated>2009-05-12T16:48:47.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android shared library'/><title type='text'>How to build and use a shared libraries in Android</title><content type='html'>Actually, it is very simple to build and use your own shared library,&lt;br /&gt;&lt;p&gt;For the shared library, you need to create an Android.mk like this: &lt;/p&gt;  &lt;pre&gt;  LOCAL_PATH := $(call my-dir)&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;&lt;/pre&gt;  &lt;pre&gt;  LOCAL_SRC_FILES := hello.c&lt;br /&gt;&lt;/pre&gt;  &lt;pre&gt;  LOCAL_CFLAGS :=&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  LOCAL_C_INCLUDES :=&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  LOCAL_SHARED_LIBRARIES := libc        &lt;=== may be not required &lt;/pre&gt; &lt;pre&gt;  LOCAL_MODULE := libhello&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  include $(BUILD_SHARED_LIBRARY)&lt;br /&gt;&lt;/pre&gt; &lt;p&gt; For the executable that needs use this shared library, the Android.mk needs to be written as :&lt;br /&gt;&lt;/p&gt;  &lt;pre&gt;  LOCAL_PATH:= $(call my-dir)&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  include $(CLEAR_VARS)&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  LOCAL_SRC_FILES := main.c&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  LOCAL_SHARED_LIBRARIES := libc libhello&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  LOCAL_MODULE := myprog          &lt;=== the name of final executable &lt;/pre&gt; &lt;pre&gt;  include $(BUILD_EXECUTABLE)&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;br /&gt;Besides makefile changes, we also need to change build/core/prelink-linux-arm.map. Android does prelink (a modified version), all the memory location of DSO are predefined. In order to build a shared library for Android, you need to define the address and size for the memory used by your DSO (before you start to build anything). For current example, I have added following lines at the end of .map file. &lt;/p&gt; &lt;pre&gt;  libhello.so            0x9A100000&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  The C code I'm using to build this example is&lt;br /&gt;main.c&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  #include "myprog.h"&lt;br /&gt;&lt;/pre&gt; &lt;pre&gt;  int main(void)&lt;br /&gt;{&lt;br /&gt;    hello("World!");&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;pre&gt;  Hello.c&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;/stdio.h&gt;&lt;/pre&gt; &lt;pre&gt;  void hello(const char* name)&lt;br /&gt;{&lt;br /&gt;    printf("Hello %s!\n", name);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-4622495811207243464?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/4622495811207243464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/how-to-build-and-use-shared-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/4622495811207243464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/4622495811207243464'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/how-to-build-and-use-shared-libraries.html' title='How to build and use a shared libraries in Android'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-2784915585476946401</id><published>2009-05-09T20:55:00.000-07:00</published><updated>2009-05-09T21:22:41.600-07:00</updated><title type='text'>Android Suspend and resume (the wakelock problem)</title><content type='html'>I enabled wakelock in my Android kernel today, after the wakelock is enabled on my PC, my machine failed to wake up. It seems that the machine gets back to suspend right after it is waken up.&lt;br /&gt;I spent two hours to read the wakelock code and try to find out the reason for the problem. It seems that the wakelock.c checks a flag called entry_event_num during the machine resume process. The value of entry_event_num is saved before the machine goes into sleep, and wakelock checks it during the machine resume. If the value of entry_event_num did not changed since machine went to sleep, then wakelock will put the machine back to sleep again.&lt;br /&gt;It looks like that the entry_event_num flag is used to verify whether the machnie is waken up from an expected event. If it is not, then machine will continue to sleep. To me this is more like a hack for a hardware bug.&lt;br /&gt;So I hacked it to make my PC to sleep well and wake up on time :-). Here is the code I have changed:&lt;br /&gt;diff --git a/kernel/power/wakelock.c b/kernel/power/wakelock.c&lt;br /&gt;index 7833d28..175f8a3 100644&lt;br /&gt;--- a/kernel/power/wakelock.c&lt;br /&gt;+++ b/kernel/power/wakelock.c&lt;br /&gt;@@ -292,11 +292,13 @@ static void suspend(struct work_struct *work)&lt;br /&gt;                        tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,&lt;br /&gt;                        tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);&lt;br /&gt;        }&lt;br /&gt;+#if 0&lt;br /&gt;        if (current_event_num == entry_event_num) {&lt;br /&gt;                if (debug_mask &amp;amp; DEBUG_SUSPEND)&lt;br /&gt;                        pr_info("suspend: pm_suspend returned with no event\n");&lt;br /&gt;                wake_lock_timeout(&amp;amp;unknown_wakeup, HZ / 2);&lt;br /&gt;        }&lt;br /&gt;+#endif&lt;br /&gt; }&lt;br /&gt; static DECLARE_WORK(suspend_work, suspend);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Actually, the wakelock is really not a good idea. From my current understanding, if one of the application hold a wakelock without timeout and dead, the machine may not be able to go to sleep forever until you reboot your machine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-2784915585476946401?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/2784915585476946401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/android-suspend-and-resume-wakelock.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/2784915585476946401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/2784915585476946401'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/android-suspend-and-resume-wakelock.html' title='Android Suspend and resume (the wakelock problem)'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2365388541401490643.post-9112362883227787175</id><published>2009-05-08T22:03:00.000-07:00</published><updated>2009-05-08T23:35:45.278-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android BatteryService fix for X86'/><title type='text'>Android on X86 Battery Service problem</title><content type='html'>Recently, I got this EeePC netbook, beside accessing e-mail and web, I leave it on my desk for most of the time. One day, I saw this web site which talks about running Android on EeePC 701, so I decided to give it a try. Normally I like to record steps and findings when I try something, so that's wh I created this blog to record my experience on Android.&lt;br /&gt;&lt;br /&gt;Here you go with my first blog...&lt;br /&gt;&lt;br /&gt;When running Android Eee_701 build on a real machine, the battery service will not show the correct battery status on the status bar. Depending on what your battery is, you may get a warning says battery level lower than 15% or simply a question mark with the battery icon.&lt;br /&gt;&lt;br /&gt;There are two issues cause these problems:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the power_supply sysfs paths used by the batteryservice jni layer are not correct. Current sysfs path for battery status is hardcoded inside com_android_server_BatteryService.cpp and it is for G1 only.&lt;/li&gt;&lt;li&gt;The way how Android handles the content of battery status files in sysfs may not be right for your machine. For example, ACPI used by x86 has a different way to provide battery charging level. It is (charge_now/charge_full)*100. But G1 phone only has one parameter, and it is current charging level in a scale of 100.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Fixing these issues are not difficult, yet the hard part is how to make the fix portable, what about tomorrow you want the same code to work on a different platform?&lt;br /&gt;It is for sure not a good idea to continue to hardcode for the sysfs path or content processing methods inside com_android_BatteryService.cpp again.&lt;br /&gt;&lt;br /&gt;Here is my 2 cents:&lt;br /&gt;We could put power_supply sysfs paths inside vendor/asus/eee_701/system.prop and then have com_android_BatteryService.cpp pick them up from system property during the run time. By doing this, you don't need to change any of your code, if you add new type of battery with different sysfs path, you don't even need to change your code.&lt;br /&gt;Now, you may want to ask me what about processing the file contents differently? For that, we may need to do more works. We could create an abstract class that can be inherited by the real battery status class. The abstract class implements the battery status common interface and methods. The real battery status class will only need to implement the special parts for different battery. And the BatteryService jni layer calls the real battery status class to collect battery status. So when you have a new battery, only a minimum mount of the code need to be changed.&lt;br /&gt;&lt;br /&gt;I have actually implemented the entire thing and the same code works on G1, EeePC and VirtualBox very well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2365388541401490643-9112362883227787175?l=beyoundtestdrive.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyoundtestdrive.blogspot.com/feeds/9112362883227787175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/android-on-x86-battery-service-problem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/9112362883227787175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2365388541401490643/posts/default/9112362883227787175'/><link rel='alternate' type='text/html' href='http://beyoundtestdrive.blogspot.com/2009/05/android-on-x86-battery-service-problem.html' title='Android on X86 Battery Service problem'/><author><name>Test Drive</name><uri>http://www.blogger.com/profile/02838214327856600071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
