adbd cannot run as root in production builds解決方法
- 問題: 使用Android studio自帶的AVD Manager開啟模擬器后,運行 adb root,會出現(xiàn)如下提示:
adbd cannot run as root in production builds - 解決方法:其實很簡單。如果要以root權(quán)限,進(jìn)入emulator的話。
- 不要使用如下類型的Image創(chuàng)建emulator,否則會導(dǎo)致上述問題的發(fā)生。
Google Play Intel x86 Atom System Image
- 請使用下述類型的Image創(chuàng)建emulator
Google APIs Intel x86 Atom System Image

Android SDK目錄結(jié)構(gòu)

- sdk全稱:software develop kits 軟件開發(fā)工具集
-
extras:擴展開發(fā)包,如高版本的API在低版本中開發(fā)使用用到的兼容包v4、v7、v13等。
該文件下也會存放Google提供的USB驅(qū)動,Intel提供的硬件加速附件工具包。
platform.png - platform
這個文件夾是SDK里面最重要的文件,這個文件夾里面含有各個版本的SDK——根據(jù)API Level劃分的SDK版本。
Android系統(tǒng)版本大大小小已經(jīng)經(jīng)歷了10多個版本,每個版本發(fā)布時Google都會提供一個sdk platform package供開發(fā)者使用。
使用Android Studio開發(fā)環(huán)境,如果bundle.gradle文件中的compileSdkVersion的API Level版本號不是這個文件夾中的其中一個,則會提示錯誤。
有時候我們在導(dǎo)入別人的項目的時候發(fā)現(xiàn)導(dǎo)入后沒有SDK,就是因為我們本地的這個文件夾中沒有我們導(dǎo)入項目編譯時的SDK,我們需要在這里加入SDK或者在項目的根目錄下的project.properties里面將compileSdkVersion改為platforms里面有的版本重新編譯即可。
還有就是如果你在布局xml文件中如果編寫沒有錯誤,但是視圖預(yù)覽不了,可能是由于你SDK選擇的版本有問題。
- platform-tools
該文件夾下放了Android平臺的相關(guān)工具比如adb.exe、sqlite3.exe等。保存著一些通用工具,比如adb、和aapt、aidl、dx等文件。提示:對于Android API Level1\2\3(最開始的版本),這里和platforms目錄中Android API Level1\2\3版本的SDK目錄中的tools文件夾有些重復(fù),主要是從android2.3開始這些工具被劃分為通用了。
隨著SDK更新版本,這里的工具會有相應(yīng)更新變化,但是一般都是向后兼容。 - system-images
存放的是創(chuàng)建Android模擬器時的鏡像文件,也就是在創(chuàng)建模擬器時CPU/ABI項需要選擇的。從android-14開始將模擬器映像文件整理在這里(原來放在platforms下) - tools
這個文件夾下存放了大量Android開發(fā)、調(diào)試的工具。
該文件夾存放各個版本都可通用的工具,里面有draw9patch 、hierarchyviewer、 emulator等工具。比如:
ddms用于啟動Android調(diào)試工具;
logcat、屏幕截圖和文件管理器;
draw9patch則是繪制android平臺的可縮放png圖片的工具;
sqlite3可以在PC上操作SQLite數(shù)據(jù)庫;
monkeyrunner則是一個不錯的壓力測試應(yīng)用,模擬用戶隨機按鍵;
mksdcard則是模擬器SD映像的創(chuàng)建工具;
emulator是Android SDK模擬器主程序,不過從android 1.5開始,需要輸入合適的參數(shù)才能啟動模擬器;
traceview作為android平臺上重要的調(diào)試工具。
Android 源碼目錄結(jié)構(gòu)解析
- abi(Application Binary Interface)
- art(Android runtime)
- bionic
一些基礎(chǔ)庫(以下只是列舉了幾個,并非全部)
libm(library math)
libc(library c):在 glibc 的基礎(chǔ)上做了裁剪與修改的,為了規(guī)避GNU GPL等商業(yè)行為的約束
libstdc++(library standard C++):并非完整版,只做了簡單支持
linker:裝載鏈接相關(guān)庫
- bootable
bootable 下僅包含 recovery 此文件夾,其實就是啟動 Android recovery 模式相關(guān)的代碼 - build
Android Build 系統(tǒng),用來定制各種編譯規(guī)則。主要由 makefile 組成。
比如在編譯時要執(zhí)行的 source build/envsetup.sh 就位于 build 下。 - cts(Compatibility Test Suite)
一個自動化測試工具 CTS。確保 make 出來的系統(tǒng)沒問題,注意如果要是修改了源碼的話相關(guān)的 testcase 也是要修改的。 - dalvik
dalvik 虛擬機,與 art 有千絲萬縷的關(guān)系。 - developers
主要是一些可運行的 Android 示例項目,可以單獨拉出來運行。 - development
工具性的東西
apps 中包含了一些并沒有在系統(tǒng)中部署的應(yīng)用
ndk 中就是和 ndk 相關(guān)的東西
samples 中則是一些示例 app
像 MonkeyTest 相關(guān)代碼位于 development/cmds/monkey 中
eclipse、emacs、intellij、xcode的配置信息位于 development/ide 中
emulator, simulator, and stuff for the NDK and SDK - device
包含不同品牌手機獨有的設(shè)備信息,具體目錄如下:
asus
common
generic
htc
huawei
lge
moto
sample
- docs
生成 source.android.com 站點的具體素材及代碼 - external
一些開源的第三方組件,這里僅列了一下大家比較熟悉的如glide、junit、okhttp、sqlite 等
aac
apache-http
bison
chromium-webview
easymock
glide
google-breakpad
google-fonts
jpeg
junit
lldb
llvm
ltrace
markdown
okhttp
opencv
proguard
protobuf
robolectric
scrypt
selinux
smali
sqlite
strace
tcpdump
valgrind
webrtc
zlib
- frameworks
這就是 Android 中大家熟悉的 Frameworks,應(yīng)用程序框架層啦,全部子文件夾如下:
av
base
compile
data-binding
ex
mff
minikin
ml
multidex
native
opt
rs
support
volley
webview
wilhelm
Android support 包 com.android.support:support-v4、v7 等都位于 frameworks/support 文件夾下
webview 就位于 frameworks/webview 文件夾下
各種 Service,比如ActivityManagerService、SystemService、WindowManagerService、InputManagerService等就位于 frameworks/base 文件夾下
keystore、opengl 等也位于 frameworks/base 文件夾下
- hardware
主要包含了 android HAL(硬件抽象層)相關(guān)代碼。硬件抽象層介于 Linux內(nèi)核驅(qū)動程序與 Android 系統(tǒng)之間。對 Linux 驅(qū)動進(jìn)行了封裝,使操作系統(tǒng)級別可以忽略底層實現(xiàn)的細(xì)節(jié)。 - libcore
一些核心庫 - libnativehelper
JNI 相關(guān)的一些類 - ndk
原生開發(fā)工具包 - out
編譯完后輸出的所有相關(guān)文件都位于此文件夾下,包括生成的各種 img 就位于 out/target/product/hammerhead 下 - packages
各種內(nèi)置的 apk、ContentProvider、輸入法、壁紙等,所有文件夾如下:
apps
experimental
inputmethods
providers
screensavers
services
wallpapers
藍(lán)牙、瀏覽器、相機、郵件、音樂、NFC 等都位于 packages/apps 下面
MediaProvider、DownloadProvider、MmsProvider等都位于 packages/providers 下
壁紙相關(guān)位于 packages/wallpapers 下
- pdk(Platform Development Kit)
平臺開發(fā)套件,僅包含了一些供硬件抽象層開發(fā)使用的必要組件,供一些 OEM 廠商用來適配及測試最新的Android 系統(tǒng),加快第三方廠商的更新速度。
加快OEM廠商的update速度 - platform_testing
平臺相關(guān)的一些測試用例 - prebuilts
一些預(yù)構(gòu)建成二進(jìn)制的庫 prebuilts
其中關(guān)于 build 時 bison 問題的主角就位于 prebuilts/misc/darwin-x86 下的 bison - sdk
看了下里邊挺多被廢棄的代碼,所以我也吃不準(zhǔn)這個文件夾的意義何在,所以暫時先不寫了 - system
Android 的部分系統(tǒng)源碼及一些工具,主要是在各種 java 啟動程序起來前的部分。工具比如 adb、fastboot、keystore 等,其他如 mkbootimg、init 進(jìn)程等。 - tools
工具,近包含 fat32lib 與 gradle - vendor
包含不同供應(yīng)商的私有的二進(jìn)制庫
