2014年10月8日 星期三

在ubuntu上,如何設定開機自動執行一些script

1. 針對個別使用者:請將指令加到 ~/.bashrc
    通常是將一些變數設定在此,讓terminal開啟時有一些環境變數可以用。
    如:
        export PATH=$JAVA_HOME/bin:$PATH

2. 針對系統開機時自動執行:請將指令加到 /etc/rc.local
    此檔案本身就有範例。

2014年7月28日 星期一

Android NDK setup in Eclipse.

網路上已經有太多文章教大家如何設定Eclipse裏面的NDK環境。

但是常常會發生一個狀況就是在Eclipse裏面找不到可以設定NDK路徑的地方。

本文即教大家如何讓NDK的選項出現,好設定NDK路徑。

網路上大家都說要在Eclipse \ Windows \ Preference \Android \ NDK 中設定路徑,但就是不知道什麼原因沒有出現上述的畫面,如下圖。

解決方式如下:
第一種 > 網路直接安裝:
1. 開啟 Eclipse \ Help \ Install New Software.
2. 在work with中設定

https://dl-ssl.google.com/android/eclipse/


3. 然後再按下旁邊的add,之後下方會出現一個可安裝的軟體列表。
4. 選擇所有軟體之後,進行下一步,逐步安裝。
5. 安裝完成之後,重新啟動Eclipse即可看見NDK選項。

第二種 > 下載到本機後安裝:
此種方法是上述的作法無法順利完成,可以採用第2種方法。
1. 先下載ADT到本機端。(下載後不需解壓縮)
2. 一樣開啟 Eclipse \ Help \ Install New Software.
3. 在work with中,先點選Add,會出現一個對話框。

4. 在對話框的Name裏面可以隨意填,只要自己認得即可。
5. 在對話框的Location選擇旁邊的Archive,然後選到第1步驟下載的檔案。
6. 接下來的步驟跟第一種方法的4, 5步驟相同。

完成之後,如同下圖。


2014年3月19日 星期三

adb device 無法發現裝置

前一陣子突然間手上的android device無法被ubuntu認識。
下了adb device指令一直沒有出現device裝置。

查了好幾個地方都沒有問題。
查看 /etc/udev/rules.d/99-android.rules也都正確。(參考資料)

最後同事教了一招。
在home目錄下有一個 .android 的目錄
裏面會有一個 adb_usb.ini 檔,請將 device 的 usb vendor id 加到此檔最後一行即可。
如何查詢device usb vendor id 請參考連結


最後檔案會如下範例:
$ cat .android/adb_usb.ini 
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x0110

其中,0x0110就是查出來的usb vendor id.

重新啟動adb一次就可以了。
$ adb kill-server
$ adb devices


2014年2月16日 星期日

在 ubuntu裡安裝sun java


  1. 下載JDK
    1. 首先下載官方的JDK. 官方網站有許多的選項,其中JDK是指Java Development Kit,如果你是開發人員,應該選擇這個。另外JRE是指Java Runtime Environment。
    2. 官方下載網站:http://www.oracle.com/technetwork/java/javase/downloads/index.html
    3. 接下來要選擇Java版本,Java分為許多版本,其中Java SE是指Standard Edition,選擇好一個版本之後,按下download,會連到更詳細的連結,這時請選擇你的OS平台,其中還分成rpm跟non-rpm,因為ubuntu不支援rpm安裝方式,所以請選擇non-rpm的版本下載。
    4. 以下假設下載的檔明為jdk6.bin
    5. 請先將此檔案改成可執行的權限
    6. chmod a+x jdk6.bin
    7. 直接執行它即可得到一個解壓縮的路徑
    8. ./jdk6.bin

  2. 安裝JDK
  3. 設定路徑
    1. export JAVA_HOME=/usr/java/jdk1.7.0 
  4. export PATH=$JAVA_HOME/bin:$PATH 
  5. export CLASSPATH=.:$JAVA_HOME/lib 

2014年2月13日 星期四

如何在eclipse下build有system權限的apk


以下為各位介紹如何在eclipse下build有system權限的apk. 並相關會遇到的問題。

當我們要寫一支system permission的apk時,需要在AndroidManifast.xml加入下面文字:
    android:sharedUserId="android.uid.system"
    < uses-permission android:name="android.permission.REBOOT" / >
    < uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" / >
    .....
然而,加入之後,會有一些狀況,描述如下:


1. eclipse build error:
在eclipse的perference中,有一些android的相關設定。
在Android\Lint Error Checking\ProtectedPermissions預設是error等級(詳如下圖),也就是說當eclipse檢查到某些被定義成system權限的字串時,會提示user error訊息。
這樣的機制導致於無法build這個apk.
如:< uses-permission android:name="android.permission.REBOOT" / > 就被判定為 error 等級

解決方式:
到preference中將ProtectedPermissions設成warning即可通過eclipse檢查。也可build出具system權限的apk.

2. adb install:
雖然#1經過修改eclipse裡面的設定可以避開檢查,成功build出apk。
但是adb install會因權限呼叫PackageManager檢查signature。結果會出現沒有signatures.

adb logcat如下:
E/PackageManager( 176): Package com.test.android.testreboot has no signatures that match those in shared user android.uid.system; ignoring!
adb install回應如下:
Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE


3. adb push:
既然adb install不成功,那改用adb push.
adb push雖然不會因權限檢查signature,但是android執行時會因權限檢查signatures,導致於下列error.
adb logcat如下:
E/PackageManager( 176): Package com.test.android.testreboot has no signatures that match those in shared user android.uid.system; ignoring!

#2跟#3的解決方式:
用相對應的platform key去sign過即可解決問題。
Sign key語法如下:
java -jar signapk.jar [pem certificate file of platform] [pk8 certificate file of platform] [origin.apk] [target.pak]
example:
java -jar signapk.jar platform.x509.pem platform.pk8 origin.apk target.pak


其他資訊#1:
如果沒有加上
android:sharedUserId="android.uid.system",
只有加
是可以build出apk,也可以用adb install方式安裝,但是runtime會出現下列錯誤訊息:

adb logcat如下:
E/AndroidRuntime( 1131): java.lang.SecurityException: Neither user 10048 nor current process has android.permission.REBOOT.


其他資訊#2:
eclipse的權限檢查不是檢查
    android:sharedUserId="android.uid.system"
而是檢查
    < uses-permission android:name="android.permission.REBOOT" / >
    < uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" / >
導致上述問題的,應該還有其他項目,目前沒有找到哪裡有詳細列出檢查的項目。


2014年2月9日 星期日

How to contribute code to AOSP

1. You need a google account. Click here to register a new one.
2. Setup your environment.
3. Download Android source code from AOSP.
3.1. #repo init -u
4. Modify file.
5. Commit in your local.
6. push code to AOSP.