# ARcore筆記 **ARcore環境建置(新函數庫)** 前言: 目前 Android Studio 最近一次更新是將所有的函數庫遷移至 AndroidX 函數庫,慢慢 Android Studio 想讓 AndroidX 函數庫來取代其他函數庫,只留下 AndroidX 函數庫。 所以我嘗試兩種方式進行建置一種是使用舊的函數庫進行建置,一種全部由 AndroidX 的函數庫來進行建置 ,都成功建立了。 我發現兩種問題: 1. ARcore 給的資源包全部都是用舊的函數庫寫的所以匯入的時候,必須將有些函數替換成 AndroidX 函數庫,必須自己進行更換。 2. 使用舊的函數庫進行建置的話,由於大家目前的 Android Studio 大多是 3.4 以上的版本,所以有機會和函數庫的資源會互相衝突就會有些麻煩。 最後我選擇使用新的函數庫來進行建置。 原因: 1. 建置步驟比較簡單,只需要找到新函數取代舊函數。 2. 怕使用舊函數,在未來會發生一些問題,例如:舊函數庫不給支援等等。 環境建置: 1. 在 Manifest 的 AndroidManifest.xml 中加入相機權限和 AR 需求權限 ```1 <uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera.ar" android:required="true"/> <meta-data android:name="com.google.ar.core" android:value="required" /> ``` ![](https://i.imgur.com/33H00gS.png) 2. 在 build.gradle(:app) 下面的 dependencies 加入等等資源包會使用到的函數 ```2 implementation fileTree(dir: "libs", include: ["*.jar"]) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.google.android.material:material:1.1.0' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'com.google.ar:core:1.17.0' implementation 'de.javagl:obj:0.3.0' testImplementation 'junit:junit:4.13' ``` ![](https://i.imgur.com/mbnhhGh.png) 3. ARcore的官網下載資源包點選 Communtity 裡面的 GitHub ![](https://i.imgur.com/W1e0HEX.png) 點選裡面的 arcore-android-sdk ![](https://i.imgur.com/L6S5udX.png) 看到 Clone or download 的 Download ZIP ![](https://i.imgur.com/b875uqo.png) 將下載完成的檔案,解壓縮打開會發現裡面有一個 samples 裡面的檔案室示範一些官方的語法和應用 ![](https://i.imgur.com/Sq86X1f.png) 在 samples 裡面的我們目前會使用到的功能只有 hello_ar_java 的範例,點進去裡面我們將我們將會用到的資源包複製一份到桌面,位置在 C:\samples\hello_ar_java\app\src\main\java\com\google\ar\core\examples\java\common 會看到 helpers 和 rendering 的資料夾我們要使用的資源包是這兩個所以複製一份 common 的資料夾到桌面 ![](https://i.imgur.com/bxNTicG.png) 像這樣 ![](https://i.imgur.com/B28XcTb.png) 另外還一個會使用到的資源包位置是在 C:\samples\hello_ar_java\app\src\main\assets 的 assets 將assets 的資料夾也複製出來裡面有 models 和 shaders ![](https://i.imgur.com/xUoPZHA.png) 這個資源包一定要放到否則最後看到的畫面一定長這樣 ![](https://i.imgur.com/Vpm2PiK.png) 我一開始放的是官方最新的 assets 資源檔,但是我發現一些渲染上的問題,網路上目前也沒有找到解決的方法,所以我這裡放入的是學長姊舊的 assets 資源檔 發生渲染上的問題 (無法正確顯示平面): ![](https://i.imgur.com/KfliXys.png) 4. 把第一個複製的資源包(common)丟入要製作的專案裡面我放的位置是 C:\專案名稱\app\src\main\java\com\example ![](https://i.imgur.com/ssvbYhA.png) 把第二個複製的資源包(assets)丟入要製作的專案裡面我放的位置是 C:\專案名稱\app\src\main ![](https://i.imgur.com/4orslqp.png) 5. 更改複製 common 的 package 的路徑 以 helpers 裡面的 CameraPermissionHelper.java 為例 ![](https://i.imgur.com/nMKeh8n.png) 改成專案裡面的路徑,像這樣 ![](https://i.imgur.com/XqE102m.png) 以 rendering 裡面的 BackgroundRenderer.java 為例 ![](https://i.imgur.com/JINkyCR.png) 改成專案裡面的路徑,像這樣 ![](https://i.imgur.com/pkIX4uS.png) 其他以此類推進行更改 6. 做到這裡匯入的資源包會出現錯誤應該是 helpers 裡面的 CameraPermissionHelper.java 和 SnackbarHelper.java 和 TrackingStateHelper.java 這三個檔案 CameraPermissionHelper.java 將舊的函數註解或刪掉,加入新的函數: ```3 import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; ``` ![](https://i.imgur.com/jPQ38yK.png) SnackbarHelper.java 將舊的函數註解或刪掉,加入新的函數: ```3 import com.google.android.material.snackbar.BaseTransientBottomBar; import com.google.android.material.snackbar.Snackbar; ``` ![](https://i.imgur.com/BSXeNGq.png) TrackingStateHelper.java 會發生這問題是因為 Java 檔案版本的問題,更新版本就可以解決 ![](https://i.imgur.com/7J4xm6m.png) 在發生錯誤的地方,按下鍵盤 Alt + Enter 或是 按下旁邊的小燈泡,就會看到: ![](https://i.imgur.com/Crxf9ec.png) 選擇第三個 Set language level to 8 - Lambdas, type annotations etc. 就會自動進行更新了。 7. 到這裡 AR 專案就已經建置完成了,剩下 import 所需要的資源檔就可以了,這裡可以不用自己打,最後可以 Alt + Enter 會自己幫你 import 。 像這樣: ![](https://i.imgur.com/tg3KbRM.png)