發表文章

如何在Eclipse CDT/CMake上編程Android C/C++ 原生程式 (適用Android P以上)

前言 對Android App的應用開發者而言,用C/C++開發,就使用Android Studio已提供C/C++/JNI的編程功能就足夠了。但是對於Android Studio所提供的C/C++編程功能並無法完全滿足Android平台開發人員在進行以C/C++編寫的平台原生服務(Native Service)。所以原生服務例如:netd、surfaceflinger或甚至init。 本文是說明如果利用Eclipse匯入Android的原生代碼(Native C/C++ Code),並且直接在Eclipse可以瀏灠、修改及編譯C/C++原生代碼以提升Android平台工程式的效率。 由於Android平台工程師主要的工作環境是Ubuntu,所以我們選擇的套件為: Ubuntu 18.04 Desktop (應可適用Ubuntu 14.04以上版本) CMake 3.x 以上版本(Ubuntu 14.04預設版本為v2.6,必須升級至3.x,可參考: https://www.claudiokuenzler.com/blog/755/install-upgrade-cmake-3.10.1-ubuntu-14.04-trusty-alternatives ) Java 8 Eclipse 2019-06 with CDT/CMake Plug-ins cmake/ninja 期望可以得到的功能是: 在Eclipse成功編譯可在Android上執行的程式 可載入Android原生Project,並且在Eclipse進行編寫、索引、編譯甚至除錯的完整功能

如何編譯AOSP內核Kernel並整合進AOSP (Android P/Pixel 2)

圖片
本文指引Android平台開發者如何取得Android官方 (AOSP)釋出的Kernel進行編譯(Build)並且刷入實機驗證。 接下來我們要完成以下項目: 取得Android官方釋出的Pixel 2 (Walleye) Kernel。(Android 9.0/Pie) 編譯核心Linux Kernel 刷入Pixel 2實機 (以下步驟對於其他Google Pixel系列手機也適用。) 整合AOSP及內核代碼庫

完整指引如何編譯AOSP (Build Android P),整合GMS及刷機 (Pixel 2)

圖片
前言 本文是說明一個Android Framework研發人員,如何利用Google的Pixel手機進行系統程式的客製化。本文的工作如下: 解鎖Pixel2 取得AOSP原始碼 編譯AOSP (Build AOSP) 將Pixel 2刷機自己編譯的ROM 修改Framework後,重編譯,再刷機,完成! 安裝GMS 本文針對Pixel 2進行刷機,理論上Pixel2 XL/Pixel 3/Pixel 3 XL應該都適用。 前置工作 解鎖Pixel 2,讓手機允許刷機 首先必須知道,官方釋出的手機的開機載入程序(Bootloader)會阻止你刷入任何客製ROM。所以所謂「解鎖」就是解鎖Bootloader,讓它允許你可以進行刷機動作。 其次要注意是在刷機後,所有使用者資料(User data)都會消失。所以刷機前要先備份重要資料。 網路上有很多教解鎖Pixel手機的文章,都可以參考,實際上在Android官網已經有教導你如何解鎖Pixel 2的Bootloader,我個人是比較習慣直接看官網來做: https://source.android.com/setup/build/running 如果你懶得看一大堆英文,根據官網的描述,以下的命令就可以讓你解鎖Bootloader。 adb reboot bootloader #等重開機後會看到一個躺著且肚子打開的機器人 fastboot flashing unlock #進入清除資料階段,螢幕顯示Erasing data... 所以解鎖其實只有兩個命令: 1. adb reboot bootloader重開機以進入“開機載入程序”,畫面如下 adb reboot bootloader後的實機畫面

建立AOSP Branch : 架設本地AOSP Gerrit Server完整指引 PART3

圖片
建立自有AOSP Branch 概觀 本文引導如何從現有的AOSP Branch建立另一個Branch以進行AOSP的客製化,以便將企業及自身的技術知識管理及保留。 本系列介紹如何建立本地自有 (Local) Gerrit Server並且將AOSP (Android Open Source Project)的原始碼完整導入此Gerrit Server。 若你已完成了 PART1(架設一個自有本地Gerrit Server)及 PART2(將AOSP完整導入Gerrit Server)的工作後 我們就會有了一台Gerrit Server主機,執行gerrit service,並且已經擁有完整AOSP主幹(master branch)的所有Projects在Gerrit Server中可供管理。 接下來我會以一個實例來進行建立自有AOSP Branch的工作,本文以Emulator驗證自行建立的Branch,並且進行原始碼的修改及執行。在之後的文章中,我會再用Pixel2來驗證自行建立的Branch再Build出的Image是可以燒錄。 主文的主要目的是指引你如何進行Android AOSP分枝建立及利用git push/repo upload來進行Code Review/Submit。這些工作在本文中都以Emulator來完成。所以在AOSP的世界,即使你沒有Pixel系統的實機(或Android One),還是可以好好享受探索Android OS! 建立Android P Branch 同步Android P官方原始碼 如同PART2的狀態,我們的Gerrit Server保有的是AOSP Master branch,那麼,我們第一步就是從官網抓回Android P (撰寫本文時,master branch是Android P的預覽版本)。但不是要整個重新抓回來,那太耗時也耗資源。我們同樣在Gerrit Client的目錄下工作,把不足的部份補回來就行了。 首先先要了解自己要抓回的版本是什麼。例如本文是想要在Pixel2上修改,所以我就要抓回Pixel2最新穩定版本。在官方上,例出的重要Branch/Tag https://source.android.com/setup/s

將AOSP加入Gerrit Server : 架設本地AOSP Gerrit Server完整指引 PART2

圖片
前言 本文在引導你如何將AOSP (Android Open Source Project)完整導入企業內部或個人Gerrit伺服器。AOSP包含近800個專案,要如何有效快速無誤的將這些專案導入Gerrit對很多IT人員來說若不知方法會是很頭痛的問題。 本文是系列文的第二篇,本系列在介紹如何建立本地自有 (local host) Gerrit Server並且將AOSP (Android Open Source Project)的原始碼完整導入此Gerrit Server。 系列分為三個部份,本文是第二部份,教導如何建立AOSP Git Mirror並且同步導入自建的Gerrit Server,如果你還不知如何架設一個Gerrit Server,可以回到這系列的 第一部份: 架設Gerrit Server , 第二部份:將AOSP完整導入Gerrit Server (本文)。 第三部份: 如何從本地Gerrit Server建立一個AOSP Branch 。 進行此AOSP導入工作的主要目的在於本人專業工作上需要修改AOSP原始碼以符合客製化的需求,但AOSP本身龐大的原始碼及代碼庫(Repository)不適合再導入公司內部原有已存在的Gerrit Server。於是乎,將AOSP導入一個新建的Gerrit Server成為一個合理的選擇。另外更重要的原因是,自身內部專案的AOSP原始碼必須能夠提供以下功能: 進行Code Review,確保穩定性及紀錄留存以保留技術知識。 同步Merge Android官方原始碼,確保官方修正的問題可以同步合入自身專案。 在完成本文中所述的任務之後,你應該可以: 建立基本Gerrit Server的能力 抓取AOSP並導入Gerrit Server的能力 同步AOSP並且合入官方修改的原始碼的能力 建立自身AOSP Branch並且修改及進行Code Review 本文在Ubuntu 18.04進行,基本上我在Ubuntu 16.04也執行過同樣任務,所以差別不大,所以你的系統是在Ubuntu 16.04,應該完全可以適用。 所需軟體 Gerrit  (version 2.16.4) Git Open JDK 8 Apache2 (非必要) MySQL (

架設Gerrit Server : 架設本地AOSP Gerrit Server完整指引 PART1

圖片
前言 本文引導入如何從無至有,建立一個專屬自己的Gerrit伺服器 (Gerrit Server) 本文是系列文的第一篇,本系列在介紹如何建立本地自有 (localhost) Gerrit Server並且將AOSP (Android Open Source Project)的原始碼完整導入此Gerrit Server。 文章分為三個部份,本文是第一部份,教導如何架設Gerrit Server,如果你已經很熟悉這個工作,可以直接跳至第二或第三部份。 第一部份:架設Gerrit Server (本文) 第二部份: 移轉整個AOSP至本地Gerrit Server 。 第三部份: 如何從本地Gerrit Server建立一個AOSP Branch , 真正利用Gerrit來確保Code的品質並且保留企業內部技術。 進行此AOSP導入工作的主要目的在於本人專業工作上需要修改AOSP原始碼以符合客製化的需求,但AOSP本身龐大的原始碼及代碼庫(Repository)不適合再導入公司內部原有已存在的Gerrit Server。於是乎,將AOSP導入一個新建的Gerrit Server成為一個合理的選擇。另外更重要的原因是,自身內部專案的AOSP原始碼必須能夠提供以下功能: 進行Code Review,確保穩定性及紀錄留存以保留技術知識。 同步Merge Android官方原始碼,確保官方修正的問題可以同步合入自身專案。 在完成本文系統的三篇文章中所述的任務之後,你應該可以: 建立基本Gerrit Server的能力 抓取AOSP並導入自有Gerrit Server的能力 同步AOSP並且合入官方修改的原始碼的能力 建立自身AOSP Branch並且修改及進行Code Review 本文在Ubuntu 18.04進行,基本上我在Ubuntu 16.04也執行過同樣任務,所以差別不大,所以你的系統是在Ubuntu 16.04,應該完全可以適用。 所需軟體 Gerrit (version 2.16.4) Git Open JDK 8 MySQL (非必要) Gerrit Delete Project Plug-in (非必要,但很好用) 安裝及設定 因為Gerrit是以Java開發,而且AOS