2020-08-14 Android系統(tǒng)安全和反編譯實戰(zhàn)_筆記(三)

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

adb_root_problem.png

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

sdk_directory.png
  • 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
google
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)制庫
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容