理解 Android Build 系统

覺得很值得越讀的好文章,備份一下。
來源:https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/
2018/3/5: 新增部分敘述不完整或錯誤敘述
2018/3/21: 新增快速build指定的image

前言

Android Build 系統是 Android 源碼的一部分。關於如何獲取 Android 源碼,請參照 Android Source 官方網站:

http://source.android.com/source/downloading.html

Android Build 系統用來編譯 Android 系統,Android SDK 以及相關文檔。該系統主要由 Make 文件,Shell 腳本以及 Python 腳本組成,其中最主要的是 Make 文件。

眾所周知,Android 是一個開源的操作系統。Android 的源碼中包含了大量的開源項目以及許多的模塊。不同產商的不同設備對於 Android 系統的定製都是不一樣的。

如何將這些項目和模塊的編譯統一管理起來,如何能夠在不同的操作系統上進行編譯,如何在編譯時能夠支持面向不同的硬件設備,不同的編譯類型,且還要提供面向各個產商的定製擴展,是非常有難度的。

[轉]Parsing a C/C++ struct in Java

這是一篇備份的文章,預防之後消失,來源是
http://jnkjava.blogspot.tw/2013/06/parsing-cc-struct-in-java.html

Assume you are a “lucky” guy that your Java application interfaces with a C/C++ application (e.g. a kind of server) which sends you some kind of TCP/UDP network messages you need to parse. An example such C/C++ structure is shown below:

[Android]常用ADB Shell

列出package name

pm list packages

列出apk位置

pm list packages -f

啟動app

am start -n <package name>/<main activity>

ex. am start -n com.package.name/.NameActivity

關閉app

am force-stop <package name>

從apk查package name & activity

aapt dump xmltree Sample.apk AndroidManifest.xml

[Android]6.0使用camera出現Fail to connect to camera service

MANIFEST PERMISSIONS WON’T WORK on Android 6.0
[java]
Failed to open camera
java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.open(Camera.java:499)
at com.google.zxing.client.android.camera.open.OpenCameraInterface.open(OpenCameraInterface.java:83)
at com.journeyapps.barcodescanner.camera.CameraManager.open(CameraManager.java:121)
at com.journeyapps.barcodescanner.camera.CameraInstance$3.run(CameraInstance.java:158)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:168)
at android.os.HandlerThread.run(HandlerThread.java:61)
[/java]

[轉]Android手機螢幕解析度如何修改

來源:https://read01.com/E5A2EJ.html

手機必須獲得ROOT權限,接著你需要確定手機的顯示density和解析度,desity的意思就是密度,在安卓系統中,desity是一個非常重要的顯示參數。如果density設置不當,比如density設置過高,可能會使字體和其他一些UI顯示得很小,而如果高分屏設置density過低,也可能會使字體和其他UI顯得過大,甚至影響App兼容。

那麼如何確定手機的density呢?其實還是比較簡單的,只需要使用RE文件管理器,開啟system目錄下的build.prop,找到「ro.sif.lcd_density=」的參數即可,後面的數字就是當前的density。具體方法是,找到build.prop文件,點擊編輯,找ro.sf.lcd_density=480就是目前的系統density。

[轉]linux ipc——shared memory

來源:http://www.rosoo.net/a/201307/16703.html

1、概念
共用記憶體:共用記憶體是進程間通信中最簡單的方式之一。共用記憶體允許兩個或更多進程訪問同一塊記憶體,就如同 malloc() 函數向不同進程返回了指向同一個實體記憶體區域的指標。當一個進程改變了這塊位址中的內容的時候,其它進程都會察覺到這個更改。

2、用途
. 共用記憶體允許兩個或多個進程共用一給定的存儲區,因為資料不需要來回複製,所以是最快的一種進程間通信機制。共用記憶體可以通過mmap()映射普通檔 (特殊情況下還可以採用匿名映射)機制實現,也可以通過系統V共用記憶體機制實現。應用介面和原理很簡單,內部機制複雜。為了實現更安全通信,往往還與信號 燈等同步機制共同使用

共用記憶體涉及到了存儲管理以及檔案系統等方面的知識,深入理解其內部機制有一定的難度,關鍵還要緊緊抓住內核使用的重要資料結構。系統V共用內 存是以檔的形式組織在特殊檔案系統shm中的。通過shmget可以創建或獲得共用記憶體的識別碼。取得共用記憶體識別碼後,要通過shmat將這個記憶體區 映射到本進程的虛擬位址空間