ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2020年8月2日日曜日

在 Android Studio 專案中導入 OpenCV

身為一個 Android BSP 工程師
不只是底層的 system bring up
或是 Linux kernel driver
又或是 HAL,NDK 串接
連上層 application 都要會呢 (´・ω・`)
真的變成名符其實的 Android 全端工程師了=v=

在 Android Studio 中使用 OpenCV for Android
這篇大概已經拖了2、3年了
一直都沒時間寫
然後每次要用就一直重蹈覆轍到處找資料= =
趁現在有時間趕快來寫一下

TL;DR

沒有...

安裝環境

  • Windows 10 1909
  • Android Studio 4.0.1
  • OpenCV 4.4.0

下載 OpenCV for Android

到 OpenCV 官網直接把 Android 版本的壓縮檔給抓下來
https://opencv.org/releases/

解壓縮

把壓縮檔裡面的這個資料夾解壓縮出來
因為這個資料夾的東西匯入專案之後就不重要了
所以隨便找個地方放就可以了

新增一個空專案

如果有舊的專案
這個步驟就直接略過就好

這邊選什麼 template 都可以
因為這個不會對接下來的動作造成影響


找個地方存放專案
然後語言看自己喜好就好
這邊用 kotlin 當示範
選好之後按 [Finish]


然後就會看到它自己開始安裝一些 components

完成之後就會看到專案了

這個時候有件很重要的事

等待它!!


因為這時候 Gradle 會開始下載一些套件跟同步整個專案
所以這個時候不等它的話
等等會出現一堆莫名其妙的錯誤!!
根據每台電腦跟網路的差異性
大約需要 1 ~ 30 分鐘不等的時間
同步完之後
就可以看到 log 裡出現跟下面這張圖差不多的東西了

匯入 OpenCV

[File]→[New]→[Import Module…]

然後就會跳出下面這個匯入用的框框

這邊有件事情很重要
剛剛解壓縮出來的路徑應該是
path/to/OpenCV-android-sdk

但是這邊要指定的 [Source directory]
是它的下一層的 [SDK] 資料夾

不然他會找不到東西的說= =
選完之後就 [Finish]

然後跟舊版的有些差異是
舊版的會需要輸入 [Module Name]
但是新的這個版本沒有地方輸入這個東西
所以等等就會產生一個很微妙的狀況
因為 Module Name 被自動設定成了
被指定的那個資料夾的名稱

所以等等這個 module 的名稱就變成了前面寫的 [SDK]

然後自動 sync 的時候就出現錯誤了Σ( ̄□ ̄|||)

這時候只要按下 error log 中
那行藍色提示安裝 NDK
就會自動跳出跟下面這張圖一樣的安裝畫面了

安裝完成之後按下那顆藍色的 [Finish] 按鈕
它就會自動開始同步專案了

然後根據電腦的效能會需要等個大概幾分鐘不等的時間

最後要在 log 中看到
CONFIGURE SUCCESSFUL 才算成功!!

然後在左上的 Project View 中
找到 [Android] 的字樣
通常專案的顯示預設是用 Android Project 來排列
不過這樣是看不到剛剛匯入的東西的!!
所以這時候要把 Project View 切換成 [Project]

切換完之後
就可以在下面的的 Project View 中
找到剛剛匯入的 [SDK] 資料夾了!!
這個東西就是剛剛匯入的 OpenCV 了!!

然後抱怨一下
以前舊版的還可以設定 module name 的時候
至少可以讓這個顯示的名字好看一點
現在這樣真的很難懂 = =

設定專案相依性

找到左上角的 [File]→[Project Structures…]

然後會跳出專案的設定

最左邊的 column 切換到 [Dependencies]
旁邊的 Modules 切換到 [app]
這邊的 [app] 是你的主要專案
所以有可能會不一樣

然後跟下圖一樣
按一下旁邊的 [+]
選到 [3 Module Dependency]

這時候就會看到跟下圖一樣的相依性追加畫面了
圖中的 [sdk] 就是剛剛匯入的 OpenCV
只是因為前面沒有設定名字
所以這邊根本看不出來他是什麼= =

然後把 [sdk] 打勾按 [OK]
這時候會回到剛剛的畫面
在畫面中的 [Dependency] 就會多了剛剛的 [sdk] 資料夾了

這時候按一下右下角的 [Apply]
然後就會看到跟下圖一樣的浮水印出現了
這時候 Gradle 會開始同步專案
沒意外的話同步完之後按藍色的 [OK] 離開

這時候會在 log 中看到 [CONFIGURE SUCCESSFUL]

到這邊基本上就設定完了!!

變更 compileSdkVersion (非必要)

這個步驟有點神奇
並不是一定要做
如果之後在 build 的時候都沒有出現問題的話
基本上這步可以不用做

不過之後 build 有出問題的話
可以考慮一下這個步驟

先把 Project View 切換回 [Android]
然後找到 Gradle Scripts
底下有個 build.gradle (Module: app)
然後把它打開來
找到 [compileSdkVersion] 這個數值
然後記得它

接著再打開 build.gradle (Module: sdk)
然後把這個的 compileSdkVersion 改成剛剛那個數字

這樣至少可以減少版本不同步的問題

測試

然後在 code 裡面加入測試用的 code

    if (!OpenCVLoader.initDebug()) {
        Log.i("OpenCV", "Failed");
    } else {
        Log.i("OpenCV", "Succeeded");
    }

直接 build …

沒意外的話
就會看到 [BUILD SUCCESSFUL]

這篇就這樣了

2018年5月27日日曜日

[AOSP] 用 Ubuntu 18.04 建立 Android 系統建置環境


在 Ubuntu 上使用 AOSP(Android Open Source Project) 編譯 android 系統

過了好多年,從之前的 ubuntu 14.04 到現在的 ubuntu 18.04

AOSP 都從 5.x 進化到 8.x 了

感覺現在連建置都變簡單了

所以只好再打一篇來記錄一下

之前好像還要打些什麼的

不過內容太多了就懶的寫了

這篇也偷懶直接複製之前的來修改w

所以這篇依然是 AOSP 的 master 的建置



為了減少除錯的時間同樣這次直接使用乾淨的系統(。-_-。)

手邊好像也沒有多餘的機器所以直接開 VM 來做...

等預算夠再來搞一台實體機好了XD

需要的東西

1. Virtualbox 任何可以安裝 Ubuntu 18.04 x64系統的版本都好
2. Ubuntu 18.04 x64 系統映像檔


然後用預設的方式安裝系統

雖然說是預設...

但是根據上面的夠強大的硬體...

基本上有三個東西要調整...

一個叫做 CPU

一個叫做 記憶體

一個叫做 硬碟

CPU 可能的話請給到 2 個核心以上

記憶體如果可能的話請給到 8GB 以上

硬碟容量分配無論如何請不要小於 100GB ← \_(・ω・`)ココ重要!

因為實際整個建置完之後的系統容量就超過 80G 了


在裝好後乾淨的 Ubuntu 系統上什麼都不要做

連更新什麼的都不要...O(>﹏<)O

雖然其實做了也不影響就是ww

然後直接在 Ubuntu 上打開終端機(alt + F2 → gnome-terminal, ctrl + alt + T)

在 terminal 裡照著下面的指令一行一行的敲就好...

沒有意外的話最後就會出現結果了XD



安裝必要的套件

$ sudo apt-get install git repo gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev lib32z1 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib tofrodos python-markdown libxml2-utils software-properties-common xsltproc libx11-dev:i386 liblz4-tool android-tools-adb android-tools-fastboot google-android-build-tools-installer bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev make optipng maven python-mako python3-mako python python3 syslinux-utils

安裝 OpenJDK

和之前不同的是,這次只需要 OpenJDK 就行了
$ sudo apt-get install openjdk-8-jdk

設定 git/repo

$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ git config --global user.email "android"
$ git config --global user.name "android"

user.email 和 user.name 的 "android"可以是任意的名稱

所以隨意就好XD

設定環境變數


再來就是要 build 整個專案了...

在 AOSP 中有許多分支

這裡只記錄 master 分支 (現時點的AOSP master 分支版本為 8.1)

這邊跟之前的不一樣,這次不再需要對 JAVA 做設定了

所以這個步驟可以直接跳過(*^▽^*)


把 AOSP master 分支的 source 抓下來

這邊要注意的是 source 很多而且很大...

所以下完指令後就可以去睡覺了...XD
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo sync -j8
這裡的 sync 的參數 -j8 是根據現在正在執行這個指令的電腦的CPU資源決定的

可以不寫讓它用預設的方式執行也可以

8 指的是現在這台電腦的核心數

理論上越多就越快...

所以也可以給 -j16 或 -j24 之類的數字

沒那麼多的話給 -j2 或 -j4 也可以XD



建置 AOSP master 分支

再建置之前先重新讀取資源
$ source build/envsetup.sh

再來就是執行建置的動作啦...
$ lunch aosp_arm-eng
$ make -j8
至於選擇 aosp_arm-eng 則是因為現在手機大部分都是這個規格XD

其實這還有其他選項就是了...

有興趣可以直接下 lunch 指令看XD

而這裡的 -j8 和 上面的 -j8 是一樣的意思

不過個人的習慣是 8G 的記憶體會給 -j4 然後 4G 的記憶體會給 -j2

至於為什麼o(‧"‧)o...好像也沒為什麼...就只是壞習慣而已XD

然後因為 android 是個巨大的專案...

所以下完 make 指令之後又可以去睡覺了...(´▽`*)

另外題外話一下

根據網路上找到的資料是用 intel xeon 8C16T 的 CPU 配 24GB 的記憶體

建置需要花 37 分鐘的時間

然後這次我拿 intel m7-6y75 開 VM 分資源 2C2T 的 CPU 配 8G 的記憶體

建置花了超過 9.5 個小時...Σ(゚д゚) エッ!?

用 AMD R7-1700 開 VM 分資源 8C8T 的 CPU 配 8G 的記憶體

只要 1 個小時 50 分鐘就結束了。

看來選 CPU 是一件很重要的事ww



基本上到這邊只要 make 跑完沒有錯誤就全部結束了...

然後建置完的輸出檔案會再 out/target/product/generic 資料夾下

最重要的有 system.img、userdata.img 和  ramdisk.img 三個映像檔

一定要確認這三個檔案有沒有存在...XD


最後就是把好不容易建好的系統放到模擬器上面執行了...


模擬測試

$ emulator

嗯...就這麼一個指令而已XD

然後就慢慢等模擬器自己動作了XD

沒意外的話就會在模擬器上面看到自己建置的 Android 系統了XD

有意外的話就只好慢慢 debug 啦~~(σ≧▽≦)σ

...

其實一定會有意外啦....ε=ε=┏( >_<)┛

因為模擬器預設的資源非常少...

所以會一直 crash 或是運作不順之類的XD

其實還有很多東西要設定...

不過這篇主要是在寫環境建置

所以模擬器設定就省略不寫了XD


=====


相關來源:

android - building the system
https://source.android.com/source/building.html

2015年10月5日月曜日

[AOSP] 用 Ubuntu 14.04 建立 Android 系統建置環境


在 Ubuntu 上使用 AOSP(Android Open Source Project) 編譯 android 系統

不知道是不是我關鍵字下的不對...

這東西怎麼資料那麼少...(´・ω・`)?

所以只好自己打一篇來做記錄了OTL

其實這篇大概拖了快一年了XD

這篇主要是 AOSP 的 master 的建置



為了減少除錯的時間所以在這邊直接使用乾淨的系統(。-_-。)

手邊好像也沒有多餘的機器所以直接開 VM 來做...

等預算夠再來搞一台實體機好了XD

需要的東西

1. Virtualbox 任何可以安裝 Ubuntu 14.04 x64系統的版本都好
2. Ubuntu 14.04 x64 系統映像檔
3. 其實這點是打完整篇才想到要加的...基本上要有夠強大的硬體支撐才行!!


然後用預設的方式安裝系統

雖然說是預設...

但是根據上面的夠強大的硬體...

基本上有三個東西要調整...

一個叫做 CPU

一個叫做 記憶體

一個叫做 硬碟

CPU 可能的話請給到 2 個核心以上

記憶體如果可能的話請給到 8GB 以上

硬碟容量分配無論如何請不要小於 100GB ← \_(・ω・`)ココ重要!



在裝好後乾淨的 Ubuntu 系統上什麼都不要做

連更新什麼的都不要...O(>﹏<)O

然後直接在 Ubuntu 上打開終端機(alt + F2 → gnome-terminal)

在 terminal 裡照著下面的指令一行一行的敲就好...

沒有意外的話最後就會出現結果了XD



安裝必要的套件

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev lib32z1 x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils python-software-properties xsltproc libx11-dev:i386 android-tools-adb android-tools-fastboot liblz4-tool gcc-4.6 g++-4.6 gcc-4.6-multilib g++-4.6-multilib

安裝OracleJDK 和 OpenJDK

OpenJDK 是在 build AOSP 的 master 和 5.0.0 時會需要用到的
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update && sudo apt-get install oracle-java6-installer
$ sudo apt-get install openjdk-7-jdk

設定 git/repo

$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ git config --global user.email "android"
$ git config --global user.name "android"

user.email 和 user.name 的 "android"可以是任意的名稱

所以隨意就好XD

設定環境變數

在 ~/bin 路徑下新增一個環境變數檔案叫做 android-env.sh
sudo gedit ~/bin/android-env.sh

然後在新增的 android-env.sh 裡加入 export 敘述句

下面這四行是要打在 android-env.sh 檔案裡的!!
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export ANDROID_JAVA_HOME=$JAVA_HOME
export PATH=$PATH:~/bin

打完後記得存檔再關閉離開
然後要重新載入剛剛打完的 android-env.sh 檔案
所以執行下面的敘述句
$ source ~/bin/android-env.sh

也是可以直接寫到 ~/.bashrc 之類的裡面

不過這樣會變成常態性一直在讀取這個檔案

所以這邊不這麼做XD



然後到這邊建置環境就設定完了XD

再來就是要 build 整個專案了...

在 AOSP 中有許多分支

這裡只記錄 master 分支 (現時點的AOSP master 分支版本為 5.1)

如果 分支的 android 版本小於 5.0.0 (不含) 則還有其他的環境變數要設定...

可能之後可以再打一篇文章這樣XD



把 AOSP master 分支的 source 抓下來

這邊要注意的是 source 很多而且很大...

所以下完指令後就可以去睡覺了...XD
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo sync -j8
這裡的 sync 的參數 -j8 是根據現在正在執行這個指令的電腦的CPU資源決定的

可以不寫讓它用預設的方式執行也可以

8 指的是現在這台電腦的核心數

理論上越多就越快...

所以也可以給 -j16 或 -j24 之類的數字

沒那麼多的話給 -j2 或 -j4 也可以XD



建置 AOSP master 分支

再建置之前先重新讀取資源
$ source ~/bin/android-env.sh
$ source build/envsetup.sh

再來就是執行建置的動作啦...
$ lunch aosp_arm-eng
$ make -j8
至於選擇 aosp_arm-eng 則是因為現在手機大部分都是這個規格XD

其實這還有其他選項就是了...

有興趣可以直接下 lunch 指令看XD

而這裡的 -j8 和 上面的 -j8 是一樣的意思

不過個人的習慣是 8G 的記憶體會給 -j4 然後 4G 的記憶體會給 -j2

至於為什麼o(‧"‧)o...好像也沒為什麼...就只是壞習慣而已XD

然後因為 android 是個巨大的專案...

所以下完 make 指令之後又可以去睡覺了...(´▽`*)

另外題外話一下

根據網路上找到的資料是用 intel xeon 8C16T 的 CPU 配 24GB 的記憶體

建置需要花 37 分鐘的時間

然後我拿 intel i7-3820 開 VM 分資源 2C2T 的 CPU 配 4G 的記憶體

建置花了超過 6 個小時...Σ(゚д゚) エッ!?

實際上到底是多久我也不知道...XD

因為我等了 6 個小時候它還沒跑完所以就去睡覺了→_→



基本上到這邊只要 make 跑完沒有錯誤就全部結束了...

然後建置完的輸出檔案會再 out/target/product/generic 資料夾下

最重要的有 system.img、userdata.img 和  ramdisk.img 三個映像檔

一定要確認這三個檔案有沒有存在...XD


最後就是把好不容易建好的系統放到模擬器上面執行了...


模擬測試

$ emulator

嗯...就這麼一個指令而已XD

然後就慢慢等模擬器自己動作了XD

沒意外的話就會在模擬器上面看到自己建置的 Android 系統了XD

有意外的話就只好慢慢 debug 啦~~(σ≧▽≦)σ

...

其實一定會有意外啦....ε=ε=┏( >_<)┛

因為模擬器預設的資源非常少...

所以會一直 crash 或是運作不順之類的XD

其實還有很多東西要設定...

不過這篇主要是在寫環境建置

所以模擬器設定就省略不寫了XD


=====

整篇到這邊就結束了...

至於最重要的是

要怎麼把很辛苦建好的系統放到手機上執行

這好像才是花那麼多時間做上面整件事的最主要目的...o(‧"‧)o?

雖然是這麼說啦....

可是要怎麼放上去就...

嗯...有空再打另外一篇好了XD







相關來源:

android - building the system
https://source.android.com/source/building.html

AndroidのOS本体をビルドしてみよう
http://note.chiebukuro.yahoo.co.jp/detail/n185974

M Preview Downloads
https://developer.android.com/about/versions/marshmallow/download.html

Factory Images for Nexus Devices
https://developers.google.com/android/nexus/images?hl=en

CentOS7でAndroid4.4(AOSP)ビルド環境
http://qiita.com/Mask_Siva/items/cf65d9889893a7e62342

Android: ソースからシステムを構築しエミュレータで実行
http://otake.knowd2.com/drupal-rotake/?q=node/119

Android 4 (Ice Cream Sandwich) をビルドしてみる
http://www.gadgety.net/shin/tips/unix/android4.html

Ubuntu 14.04 64bit版での Android ビルド環境
http://blog.sola-dolphin-1.net/archives/4633272.html