# Android 打包.aar給Unity使用 ## 前情提要 因為要開發AR專案使用Unity較便利,且需要使用C++的第三方函式庫, 加上設備是Android系統,在Android Studio裡debug較容易等原因... 所以打算將Android專案打包成aar最後使用Unity去呼叫。 參考資料裡的方法我都親身試過,有兩種方法 1.直接對現有的module做連結 2.創建專門對接Unity的module 第二種方法必須重建專案,然後...失敗了,所以我這篇主要針對第一種方法 以下會大致簡述流程,並特別點出可能會踩到的坑, 基本上根據參考資料的第一篇下去做加上我這篇就沒問題了。 軟體版本: Unity 2018.4.3f1 Android Studio 3.5.3 Gradle version 5.4.1 ## 步驟 1.創建Android Studio 專案 * Package name與Unity專案中的Bundle Idenifier一致 * Package name預設為com.example.ApplicationName,其中"example"最好換掉,若不更改Unity在某些情況下會有問題 2.新增"classes.jar"到當下module的dependencies * 這東西麻煩的是每次build aar都必須用解壓縮軟體打開去刪除libs裡多包進去的classes.jar,記得要刪不然Unity build不過 * 在第二種方法中似乎可以將classes.jar放在libs以外的資料夾,並去改build.gradle中的設定把它改成only complie,這樣就不會多包進去,但我沒有在第一種方法中嘗試過,僅提供一個思路 3.修改build.gradle * 修改apply plugin: 'com.android.applicaion'變成apply plugin: 'com.android.library' * 刪除defaultConfig下的applicationId * **特別特別特別要注意的東東來了,請加入以下這段**,其他就和參考資料一樣 ``` afterEvaluate { generateReleaseBuildConfig.enabled = false generateDebugBuildConfig.enabled = false } ``` 4.修改MainActivity * 拿掉setContentView,不然會用在android裡的xml * 這裡也是要注意一下,原本是繼承AppCompatActivity,要改成繼承UnityPlayerActivity。(p.s. Unity只能使用UnityPlayerActivity,Android則都可以) ``` import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { ... } ``` 5.修改AndroidManifest * 這個東東是Android的設定檔,非常重要,開權限蝦米的都在這做,看了一些網路上的教學,結論就是只要做三件事 1.theme要改為 android:theme="@android:style/Theme.NoTitleBar" 2.在主activity內加入<meta-data android:name="unityplayer.UnityActivity" android:value="true"/> 3.刪除res\Values目錄下的styles.xml 6.修改xml * 刪除以下這些東東,並改成RelativeLayout  7.Rebuild Project打包出aar * 用debug的就行了 8.將aar丟入Plugins/Android下,build Unity專案 * 記得把aar內的AndroidManifest拉出來,libs內的classes.jar刪掉 * Minimum API Level要與AndroidManifest一致 * Bundle Identifier要與aar的PackageName一致 * 有用到第三方aar記得也要丟進來 ## 參考資料 第一種方法: https://www.itread01.com/content/1547966528.html https://blog.csdn.net/u011428080/article/details/79436839 第二種方法: https://www.jianshu.com/p/86b275da600e ## 補充資料 Program type already present - https://blog.csdn.net/xiongya8888/article/details/103769965 Error:Execution failed for task':app:externalNativeBuildCleanDebug' - https://blog.csdn.net/u014518723/article/details/74437043 第二種方法自定義Activity https://www.jianshu.com/p/6e7f580a7e8c --------------------------- ## 後記 externalNativeBuildCleanDebug的bug必須把原專案的.cxx和build刪除 或許可以研究 bus 的東東,可以在不同module中溝通。 https://stackoverflow.com/questions/43031207/take-photo-in-service-using-camera2-api
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up