使用adb devices 出现如下:
List of devices attached
???????????? no permissions
解决方法:
1. 找出usb vid,pid
$ lsusb #列出usb device內容
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 003: ID 192f:0916 Avago Technologies, Pte.
Bus 003 Device 002: ID 0e8f:0022 GreenAsia Inc.
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 005: ID 18d1:4e26
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
只要插入usb device查乙次,拔出usb device查詢一次,比較差異就可以知道我們要的usb device是哪一個。
如:
Bus 003 Device 002: ID 0e8f:0022 GreenAsia Inc.
其中的0e8f就是vid,0022就是pid.
2. 編輯權限
$ sudo vim /etc/udev/rules.d/70-android.rules
加入以下內容
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e8f", ATTRS{idProduct}=="0022",MODE="0666"
3. 重新啟動 udev service
$ sudo chmod a+rx /etc/udev/rules.d/70-android.rules
$ sudo service udev restart
4. 重新啟動 adb
$ sudo ./adb kill-server
$ ./adb devices
完成
2012年9月25日 星期二
2012年9月18日 星期二
UML中的關聯
class之間的關係有以下幾種
1. Association / 關聯 / knows a
X知道Y的存在
X可能以pointer(指標)或reference(參考)知道Y的存在
在概念模型階段方向性(箭頭)通常不太有意義可以省略
2. Dependency / 相依 / use a
A dependency exists between two elements if changes to the definition of one element (the supplier) may cause changes to the other (the client).
X相依Y
Y若改變 X可能會受到影響 但X的改變不會影響到Y
X可能有某個function可以call Y的function
舉個例子:
有一個 class Circle,提供 drawCircle 的功能,然 drawCircle 內部是使用 java 的 graphic 來實作繪圖。則我們可以說:Circle use a graphic. 也就是 Circle 相依於 graphic.
3. Composition / 組合 / has a
car 組合 wheel
Composition是一種整體完全擁有部分
如車子(car)擁有4個輪子(wheel)
當車子(car)消滅時4個輪子(wheel)同時也會消滅
4. Aggregation / 聚合
car 聚合 passenger
Aggregation是一種"擁有性"比較弱的關係
如:
車子(car)裡面有4個人(passenger)
當車子(car)消滅時4個人(passenger)不會消滅
Composition是『同生共死』,當System物件死亡時,Component物件也要跟著死亡。Aggregation是『生死有命』,當System物件死亡時,Component物件並不特別去處理。
在C#、Java這類有garbage collection的語言,composition幾乎不會用到,但在C++,只要用到pointer,就得自己去delete,所以在composition對於C++就很重要。
再舉個例子,(from wiki)
a university owns various departments (e.g., chemistry), and each department has a number of professors. If the university closes, the departments will no longer exist, but the professors in those departments will continue to exist. Therefore, a University can be seen as a composition of departments, whereas departments have an aggregation of professors. In addition, a Professor could work in more than one department, but a department could not be part of more than one university.
5. Inheritance / 繼承 (UML以繼承表示泛型關係)
X繼承Z,Y繼承Z,此時Z和X,Y之間就存在著泛型關係。
Z是共同化(抽象化),X/Y則是特性化(具體化)
如:
BMW / Benz 繼承Car,則Car和BMW / Benx就存在泛型關係
2012年5月1日 星期二
在Linux下使用兩張網卡的設定
在一些場合,需要讓同一台電腦,用兩張不同的網卡,來做不同的事情,今天要說的就是這個。最常應用的狀況就是:一個網卡用於對內網路,一個網卡用於對外網路。
ethernat設定如下:
設定如下:
一般我們現在用的NB通常會有ethernet介面跟wifi介面,我們假設要用wifi連上internet(前題是wifi 熱點已經可以上網),用ethernet連私有網路。
wifi設定應該如下:
wlan_IP: 192.168.0.X
Submask: 255.255.255.0
以上資料由熱點的DHCP提供。
ethernat設定如下:
eth0_IP: 172.16.0.X
Submask: 255.255.255.0
以上資料由內部的DHCP提供。
我們要做的事:
1. 先查出這兩張網卡的gateway.
我的方式比較簡單,只要停用其中一個網卡,利用 route -n 即可知道。如:
Destination = 0.0.0.0 的那一行就是default gateway.
我們可以用這個方式查出兩個gateway的IP.
2. 查出 route的設定
完成之後,將兩張網卡都啟動,再次執行route -n,察看目前預設的route狀況
3. 修改route成我們要的方式
因為 linux環境中只能有一個 default gateway,所以我們可以先用下列指令新增default gateway.
sudo route add default gw {default_gateway_ip1}
用下列指令將不要的default gateway 移除
sudo route delate default gw {default_gateway_ip2}
但是這樣做只是將大家的default gateway換掉,並沒有做到分開。
為了要將內網/外網分開,所以我們要加一條指令,設定封包流動的方法
route add -net 172.16.0.0 netmask 255.255.0.0 gw 172.16.100.1
上面這一條指令的意思就是,只要是要到172.16.*.*的封包,都請傳送到172.16.100.1的gateway。
其餘的就請透過 default gateway來傳送。
參考資料
2012年4月25日 星期三
android default luncher 決定流程
今天介紹一下Android如何決定使用哪一個luncher的。
我們在market上可以下載很多不同廠商製作的luncher,那當我們的luncher超過一個時,Android如何決定要使用哪一個luncher?
基本上Android system會先查看有多少luncher被安裝了,如果多於一個時,Android會再查看是否有default的luncher設定,如果有的話,優先使用deault luncher,如果沒有的話,會跳一個視窗讓使用者選擇要使用的luncher,同時也可以選擇將這個luncher設成預設。整個流程如下。
那如果已經設定一組default的luncher之後,如何變更呢?
只要到 [設定] / [應用程式] / [管理的應用程式] / [全部] 頁面,點選目前預設的luncher,然後點擊 [清除預設值],然後按 [Home] 時即會出現可以選擇luncher的視窗了。
我們在market上可以下載很多不同廠商製作的luncher,那當我們的luncher超過一個時,Android如何決定要使用哪一個luncher?
基本上Android system會先查看有多少luncher被安裝了,如果多於一個時,Android會再查看是否有default的luncher設定,如果有的話,優先使用deault luncher,如果沒有的話,會跳一個視窗讓使用者選擇要使用的luncher,同時也可以選擇將這個luncher設成預設。整個流程如下。
那如果已經設定一組default的luncher之後,如何變更呢?
只要到 [設定] / [應用程式] / [管理的應用程式] / [全部] 頁面,點選目前預設的luncher,然後點擊 [清除預設值],然後按 [Home] 時即會出現可以選擇luncher的視窗了。
2012年4月24日 星期二
Linux 環境下如何擷取Android畫面
開發Android難免會需要擷取Adnroid的畫面,不管是開發前期,開發中,或是最後製作說明文件。
提供幾個方法可以擷取Android畫面的方式:
1. 最困難,也最簡單的方法:最困難是使用前要安裝一堆環境,但是最後最容易使用。本方法適用於一般app的開發者。
就是透過eclipse裏面的ddms直接擷取畫面。
2. 有點簡單的方法:
如果你已經有build好的Android source tree的話,在out/host/linux-x86/bin目錄下執行 ./ddms會呼叫ddms的UI介面,然後選擇Menu中的device -> capture screen 就可以了。
3. 最簡單的方式:
這跟#2一樣,適用於已經有build好的Android source tree的使用者,直接到out/host/linux-x86/bin目錄下執行 ./screenshot2 -d {要存的檔名}即可。
提供幾個方法可以擷取Android畫面的方式:
1. 最困難,也最簡單的方法:最困難是使用前要安裝一堆環境,但是最後最容易使用。本方法適用於一般app的開發者。
就是透過eclipse裏面的ddms直接擷取畫面。
2. 有點簡單的方法:
如果你已經有build好的Android source tree的話,在out/host/linux-x86/bin目錄下執行 ./ddms會呼叫ddms的UI介面,然後選擇Menu中的device -> capture screen 就可以了。
3. 最簡單的方式:
這跟#2一樣,適用於已經有build好的Android source tree的使用者,直接到out/host/linux-x86/bin目錄下執行 ./screenshot2 -d {要存的檔名}即可。
2012年4月23日 星期一
ANDROID_SWT問題
在Linux環境下執行ddms時有時候會出現
SWT folder '/XXXX/android/out/host/linux-x86/framework/x86' does not exist.
Please export ANDROID_SWT to point to the folder containing swt.jar for your platform.
這是因為swt.jar找不到。
很簡單的方法可以解決:
先用 locate swt.jar 找到哪裡有swt.jar.
然後直接 export ANDROID_SWT={找到的路徑}
就可以正常使用了。
2012年1月11日 星期三
file compare tool in lunix
今天跟大家介紹在ubuntu下如何做檔案比對。
在windows下我們很容易找到一些如windiff, winmerge等等之類的軟體,同樣在ubuntu環境下也有一些軟體工具可以做同樣的事。
1. KDiff3
home: http://kdiff3.sourceforge.net/
command: sudo apt-get install kdiff3
優點:○目錄比對
缺點:×即時編輯
2. Diffuse
home: http://diffuse.sourceforge.net/
command: sudo apt-get install kdiff3
優點:○即時編輯
缺點:×目錄比對
3. Kompare
home: http://www.caffeinated.me.uk/kompare/
command: sudo apt-get install kdiff3
優點:○目錄比對
缺點:×即時編輯
~~~附加一提~~~
自己試了一下上面提到的軟體都沒有提供:滑鼠右鍵選取兩個檔案,直接進入比對視窗。
但是透過修改設定就可以達到功能要求。
1. change context menu for diffuse
sudo vim /usr/share/applications/diffuse.desktop
=====修改以下內容=====
Exec=diffuse %F %F
====================
2. change context menu for kdiff3
sudo vim ~/.local/share/applications/userapp-kdiff3-DHDL7V.desktop
=====修改以下內容=====
Exec='/usr/bin/kdiff3' %f %f
====================
3. change context menu for kompare
sudo vim /usr/share/applications/kde4/kompare.desktop
=====修改以下內容=====
# Exec=kompare -caption "%c" -o %U
Exec=kompare %f %f
====================
當然,如果你不想安裝任何軟體,也是有一些網站提供基本的檔案比對服務。
1. comparemyfile
home:http://www.comparemyfiles.com/
最後,也提供一個最新的參考連結。
http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools
在windows下我們很容易找到一些如windiff, winmerge等等之類的軟體,同樣在ubuntu環境下也有一些軟體工具可以做同樣的事。
1. KDiff3
home: http://kdiff3.sourceforge.net/
command: sudo apt-get install kdiff3
優點:○目錄比對
缺點:×即時編輯
2. Diffuse
home: http://diffuse.sourceforge.net/
command: sudo apt-get install kdiff3
優點:○即時編輯
缺點:×目錄比對
3. Kompare
home: http://www.caffeinated.me.uk/kompare/
command: sudo apt-get install kdiff3
優點:○目錄比對
缺點:×即時編輯
~~~附加一提~~~
自己試了一下上面提到的軟體都沒有提供:滑鼠右鍵選取兩個檔案,直接進入比對視窗。
但是透過修改設定就可以達到功能要求。
1. change context menu for diffuse
sudo vim /usr/share/applications/diffuse.desktop
=====修改以下內容=====
Exec=diffuse %F %F
====================
2. change context menu for kdiff3
sudo vim ~/.local/share/applications/userapp-kdiff3-DHDL7V.desktop
=====修改以下內容=====
Exec='/usr/bin/kdiff3' %f %f
====================
3. change context menu for kompare
sudo vim /usr/share/applications/kde4/kompare.desktop
=====修改以下內容=====
# Exec=kompare -caption "%c" -o %U
Exec=kompare %f %f
====================
當然,如果你不想安裝任何軟體,也是有一些網站提供基本的檔案比對服務。
1. comparemyfile
home:http://www.comparemyfiles.com/
最後,也提供一個最新的參考連結。
http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools
訂閱:
文章 (Atom)