A. 怎樣在ubuntu 下安裝android驅動
首先得確保手機的[設置/開發/調試]是勾選上的。
然後使用lsusb查找到devID,以16進制寫入到本地電腦隱藏目錄文件[/home/用戶名/.android/adb_usb.ini]中
最後打開一個命令行執行./adb devices即可
B. 如何把CyanogenMod 移植到到自己的android設備上
工欲善其事,必先利其器
1、基礎環境
使用的環境:ubuntu 11.04環境,測試的Android機器 華為:C8500。
官方文檔列出開發需要下列的軟體包以及下載來源:
python 2.5 -- 2.7, python.org.
GNU Make 3.81 -- 3.82, gnu.org
JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older. You can download both from java.sun.com.這里安裝的是JDK6
Git 1.7 or newer. git-scm.com.
官方文檔說11.10的運行以下的安裝命令如下:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils xsltproc
網上有一安裝的指引給出另一個安裝命令
$sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool
由於懶得逐個包去甄別,上述兩條命令我都運行和安裝了。
注意:sun-java6-jdk是無法安裝的,可以自己下載
2、關於 USB 訪問許可權
Android的開發和調試使用的最主要連接設備的命令 adb和fastboot都需要使用USB連接,從文檔上知道,Ubuntu下面USB的訪問許可權可能會出問題,解決的方法文檔也列明了。
我的經驗是如果訪問不了連接的USB設備了,再查閱資料處理。為了以備以後查閱,記錄下來如下:
針對摩托羅拉的設備,使用root文件創建/lib/udev/rules.d/11-android.rules,生成下列的配置到文件中。#號為注釋符號,下列配置,第一行針對一種設備,第二行針對所有摩托羅拉設備。
#SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", ATTRS{idProct}=="41db",MODE="0666,OWNER="shallon"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666", OWNER="shallon" #All Motorola
其中的idVendor和idProct的值怎麼來呢?用USB線連接設備,然後運行lsusb可以看到設備的這兩個值,例如,下文顯示摩托羅拉的ME811的相關配置值就是22b8和41db。
Bus 001 Device 082: ID 22b8:41db Motorola PCS Droid/Milestone (Debug mode)
Bus 001 Device 083: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse
3、安裝repo
repo是一種更好的用git的一種工具環境。下面命令中repo安裝到用戶home目錄的bin目錄下。
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
4、下載安裝Android 源碼
如果不打算編譯Android源碼,可以跳過。在WORKING_DIRECTORY上下載源代碼,使用repo init命令指定下載源代碼的版本,-b 參數指定版本號,如果不指定,則是最近的一個版本。
repo sync則是下載/同步代碼的命令。
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ repo init -u https://android。googlesource。com/platform/manifest
$ repo init -u https://android。googlesource。com/platform/manifest -b android-4.0.1_r1
$ repo sync
4.a、下載 cyanogenmod 的源碼可以生成自定義的 Android Rom
CyanogenMod 致力於生成第三方的非官方的 Android 的 Rom ,目前比較火爆的小米手機的MIUI就是CyanogenMod的衍生產品。下面的命令獲取 gingerbread 的版本的源代碼。如果不打算嘗試這些工作可以跳過此步。
$ mkdir -p ~/cyanogenmod
$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
$ repo sync -j16
n這里是16,表示同時打開的網路鏈接數,開啟多個網路連接來下載,用以提升的下載的速度。
5、下載開發編譯用的Android SDK
參考的官方文檔:http://developer。android。com/sdk/installing.html
5.1下載eclipse開發環境,推薦安裝「Eclipse Classic」版本,介質下載的地址:http://www.eclipse.org/downloads/ 不用eclipse者可以略過
5.2下載Android SDK,介質安裝的地址:http://developer。android。com/sdk/index.html
5.3下載安裝eclipse 的ADT plug-in,ADT是 Android Development Tools的縮寫。
5.4安裝相關的工具包開發包。
安裝的方法,可以從eclipse的IDE界面啟動Android SDK Manager, Window > Android SDK Manager,或者在Android SDK的根目錄運行android命令。
下列的開發包必須要安裝:「SDK Tools」,「SDK Platform-tools」,「Android platforms(選擇一個或者多個)」
6、測試Android SDK的主要開發工具
6.1 adb
使用USB線連接一台測試的Android設備,運行adb 的兩個命令
~/android/sdk/android-sdk-linux/platform-tools$ ./adb devices
List of devices attached
0A3AABB70502A00A device
以及
~/android/sdk/android-sdk-linux/platform-tools$ ./adb shell 連接上設備,能夠看到設備上的文件系統,證明adb的工具運作正常。
adb的工具很重要,主要用來調測設備。如果設備被「root」(系統被破解,開放了設備的管理員許可權),連接上設備之後,能進行安裝、刪除軟體,遠程上傳/下載文件,以及查看系統的日誌等操作。如果設備沒有「root」,則可以用的操作少很多。
6.2 fastboot
fastboot則是用來刷機的,主要用到的操作如下:
fastboot flash userdata userdata.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot reboot
6.3 SDK上的Android模擬器
~/android/sdk/android-sdk-linux/tools$ ./emulator ,顯示命令存在,但是報錯了,不要緊,這里運行一下只是看看是否正常安裝了。
C. Android怎麼生成設備節點
Android如何生成設備節點 在Android中,由於沒有mdev和udev,所以它沒有辦法動態的生成設備節點,那麼它是如何做的呢? 我們可以在system/core/init/下的init.c和devices.c中找到答案: init.c中 int main(int argc, char **argv) { ... /* Get the basic filesystem setup we need put * together in the initramdisk on / and then we'll * let the rc file figure out the rest. */ mkdir("/dev", 0755); mkdir("/proc", 0755); mkdir("/sys", 0755); mount("tmpfs", "/dev", "tmpfs", 0, "mode=0755"); mkdir("/dev/pts", 0755); mkdir("/dev/socket", 0755); mount("devpts", "/dev/pts", "devpts", 0, NULL); mount("proc", "/proc", "proc", 0, NULL); mount("sysfs", "/sys", "sysfs", 0, NULL); for(;;) { ... if (ufds[0].revents == POLLIN) handle_device_fd(device_fd); if (ufds[1].revents == POLLIN) handle_property_set_fd(property_set_fd); if (ufds[3].revents == POLLIN) handle_keychord(keychord_fd); } return 0; } 我們再來看看handle_device_fd(),該函數定義在devices.c中 void handle_device_fd(int fd) { ... handle_device_event(&uevent); handle_firmware_event(&uevent); } } 而handle_device_event定義如下: static void handle_device_event(struct uevent *uevent) { ... if(!strcmp(uevent->action, "add")) { make_device(devpath, block, uevent->major, uevent->minor); return; } ... } make_device定義如下: static void make_device(const char *path, int block, int major, int minor) { ... mode = get_device_perm(path, &uid, &gid) (block S_IFBLK : S_IFCHR); dev = (major $amp; ... setegid(gid); mknod(path, mode, dev); chown(path, uid, -1); setegid(AID_ROOT); } 我們看看get_device_perm如下實現: static mode_t get_device_perm(const char *path, unsigned *uid, unsigned *gid) { mode_t perm; if (get_device_perm_inner(qemu_perms, path, uid, gid, &perm) == 0) { return perm; } else if (get_device_perm_inner(devperms, path, uid, gid, &perm) == 0) { return perm; } else { struct listnode *node; struct perm_node *perm_node; struct perms_ *dp; /* Check partners list. */ list_for_each(node, &devperms_partners) { perm_node = node_to_item(node, struct perm_node, plist); dp = &perm_node->dp; if (dp->prefix) { if (strncmp(path, dp->name, strlen(dp->name))) continue; } else { if (strcmp(path, dp->name)) continue; } /* Found perm in partner list. */ *uid = dp->uid; *gid = dp->gid; return dp->perm; } /* Default if nothing found. */ *uid = 0; *gid = 0; return 0600; } } 我們最後可以看到在devperms中定義了要生成的設備節點: static struct perms_ devperms[] = { { "/dev/null", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/zero", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/full", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/ptmx", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/tty", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/random", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/urandom", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/ashmem", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/binder", 0666, AID_ROOT, AID_ROOT, 0 }, /* logger should be world writable (for logging) but not readable */ { "/dev/log/", 0662, AID_ROOT, AID_LOG, 1 }, /* the msm hw3d client device node is world writable/readable. */ { "/dev/msm_hw3dc", 0666, AID_ROOT, AID_ROOT, 0 }, /* gpu driver for adreno200 is globally accessible */ { "/dev/kgsl", 0666, AID_ROOT, AID_ROOT, 0 }, /* these should not be world writable */ { "/dev/diag", 0660, AID_RADIO, AID_RADIO, 0 }, { "/dev/diag_arm9", 0660, AID_RADIO, AID_RADIO, 0 }, { "/dev/android_adb", 0660, AID_ADB, AID_ADB, 0 }, { "/dev/android_adb_enable", 0660, AID_ADB, AID_ADB, 0 }, { "/dev/ttyMSM0", 0600, AID_BLUETOOTH, AID_BLUETOOTH, 0 }, { "/dev/ttyHS0", 0600, AID_BLUETOOTH, AID_BLUETOOTH, 0 }, { "/dev/uinput", 0660, AID_SYSTEM, AID_BLUETOOTH, 0 }, { "/dev/alarm", 0664, AID_SYSTEM, AID_RADIO, 0 }, { "/dev/tty0", 0660, AID_ROOT, AID_SYSTEM, 0 }, { "/dev/graphics/", 0660, AID_ROOT, AID_GRAPHICS, 1 }, { "/dev/msm_hw3dm", 0660, AID_SYSTEM, AID_GRAPHICS, 0 }, { "/dev/input/", 0660, AID_ROOT, AID_INPUT, 1 }, { "/dev/eac", 0660, AID_ROOT, AID_AUDIO, 0 }, { "/dev/cam", 0660, AID_ROOT, AID_CAMERA, 0 }, { "/dev/pmem", 0660, AID_SYSTEM, AID_GRAPHICS, 0 }, { "/dev/pmem_adsp", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/pmem_camera", 0660, AID_SYSTEM, AID_CAMERA, 1 }, { "/dev/oncrpc/", 0660, AID_ROOT, AID_SYSTEM, 1 }, { "/dev/adsp/", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/snd/", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/mt9t013", 0660, AID_SYSTEM, AID_SYSTEM, 0 }, { "/dev/msm_camera/", 0660, AID_SYSTEM, AID_SYSTEM, 1 }, { "/dev/akm8976_daemon",0640, AID_COMPASS, AID_SYSTEM, 0 }, { "/dev/akm8976_aot", 0640, AID_COMPASS, AID_SYSTEM, 0 }, { "/dev/akm8973_daemon",0640, AID_COMPASS, AID_SYSTEM, 0 }, { "/dev/akm8973_aot", 0640, AID_COMPASS, AID_SYSTEM, 0 }, { "/dev/bma150", 0640, AID_COMPASS, AID_SYSTEM, 0 }, { "/dev/cm3602", 0640, AID_COMPASS, AID_SYSTEM, 0 }, { "/dev/akm8976_pffd", 0640, AID_COMPASS, AID_SYSTEM, 0 }, { "/dev/lightsensor", 0640, AID_SYSTEM, AID_SYSTEM, 0 }, { "/dev/msm_pcm_out", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/msm_pcm_in", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/msm_pcm_ctl", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/msm_snd", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/msm_mp3", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/audience_a1026", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/tpa2018d1", 0660, AID_SYSTEM, AID_AUDIO, 1 }, { "/dev/msm_audpre", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/msm_audio_ctl", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/htc-acoustic", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/vdec", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/q6venc", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/snd/dsp", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/snd/dsp1", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/snd/mixer", 0660, AID_SYSTEM, AID_AUDIO, 0 }, { "/dev/smd0", 0640, AID_RADIO, AID_RADIO, 0 }, { "/dev/qemu_trace", 0666, AID_SYSTEM, AID_SYSTEM, 0 }, { "/dev/qmi", 0640, AID_RADIO, AID_RADIO, 0 }, { "/dev/qmi0", 0640, AID_RADIO, AID_RADIO, 0 }, { "/dev/qmi1", 0640, AID_RADIO, AID_RADIO, 0 }, { "/dev/qmi2", 0640, AID_RADIO, AID_RADIO, 0 }, /* CDMA radio interface MUX */ { "/dev/ts0710mux", 0640, AID_RADIO, AID_RADIO, 1 }, { "/dev/ppp", 0660, AID_RADIO, AID_VPN, 0 }, { "/dev/tun", 0640, AID_VPN, AID_VPN, 0 }, { NULL, 0, 0, 0, 0 }, };
D. Android認證包括什麼android認證只包括GMS認證嗎
GMS綜述
GMS認證,一般要求我們提供CTS, XTS, Verify三份測試報告,如下圖:
4 Fail項的處理
給高通提case,給MTK提eservice,因為這個一般自己能解的比較少,主要還是要靠高通和MTK來解。 慢慢積累自己的fail項庫 慢慢積累自己處理fail項的能力
E. 怎樣在烏班圖系統中新建70-android-usb.rules文件
你需要這么做下,udev的文件系統需要添加這個uevent的rule: 基於uevent驅動載入機制,需要再/etc/udev/rules.d/51-android.rules文件,內容如下 SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666" 同時chmod修改777許可權。
F. 如何在Android平台上使用USB Audio設備
Android對USB的支持有兩種模式:
HOST模式:Android設備為USB匯流排和外設供電,數據傳輸是雙向的。
Accessory模式:即附件模式,Android作為附件,手機和電腦連接,通常是這種模式,由USB Device端向匯流排供電,數據傳輸方向是雙向的。這就是為什麼手機插到電腦上可以充電的原因。
在討論具體代碼之前,需要先講一下再host模式下面的調試辦法,因為數據線的埠被外設使用了,那麼,傳統的連接數據線調試的方法已經不行了。官網給出了解決辦法:
1、請把Android設備用數據線連接到電腦,當然,也要把Android設備的wifi打開。
2、在windows命令行下,進入SDK platform-tools/ 目錄(具體看SDK安裝在哪個目錄了),執行 adb tcpip 5555 回車。這里其實是打開了adb調試的無線埠(Android設備在電腦上的埠映射),其實後面的數字可以隨便來,只要埠沒有被佔用。
3、adb connect <device-ip-address>:5555鍵入回車,這里的device-ip-address是Android端的IP地址。
4、最後adb usb回車,假如沒有問題,現在已經可以在eclipse上看到logcat的輸出了。
其實還有個簡單的辦法,可以在應用商店上下一個無線ADB工具,隨便哪個都可以,這類工具就是在Android端做了上面的那些工作,而且還不用連數據線,但是第三步的那個操作還是要在windows的命令行窗口手動輸入的。
G. Ubuntu下連接Android手機為什麼沒有反應或者說Linux怎樣連接Android手機來使用U盤
這個恩一般我記得連接Android的操作系統你得給usb添加一個驅動到/etc/udev/下面哦。ubuntu現在是基於uevent驅動的熱插拔機制。
基於uevent驅動載入機制,需要再/etc/udev/rules.d/51-android.rules文件,內容如下SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"同時chmod修改777許可權。供usb驅動使用