本篇使用的 IDE 版本為 Android Studio 1.5.1,Unity 5.4,使用更高的版本理論上不會有很大問題。
在 Unity5 出來之前,我一直都是使用 Eclipse 來寫 Android 插件為 Unity 提供支持,但隨著 Android Studio 的出現,Google 官方宣布將停止對 Eclipse ADT 的維護,也就是說,用 Android Studio 來開發 Android 應用才是趨勢。而 Unity 也跟上了這點,在 Unity5 推出時,表示支持 Android AAR(Android Archive:是一個 Android 庫項目的二進制歸檔文件,為 Android 項目提供模塊化支持)格式的文件作為 Unity 插件,而 AAR 格式的文件,正可以使用 Android Stdio 進行生成。
簡單而言,AAR 文件我們可以理解成原來使用的 JAR+資源文件,我們不再需要在 Unity 項目中建立多個文件進行插件目錄的構建,我們只需要簡單地把從 Android Studio 導出的 AAR 文件和對應的 AndroidManifest 文件加到 Plugin/Android 目錄下即可。
我們看下具體操作:
1、新建
首先我們要在 Android Studio 上新建一個工程(Project)或模塊(Module),這個我想不用過多說明吧,會使用 IDE 的應該都會。
2、修改樣式
我們需要在 AndroidManifest 中的 application 結點修改應用的主樣式為系統樣式,因為導出的 AAR 文件將不帶自定義的樣式,在我們的 Unity 項目中生成最終 apk 的時候會出現樣式找不到的錯誤。
修改了配置清單后,我們還要對 styles 文件進行樣式的注釋移除,以防萬一。
【Ps:除了樣式,我們還要在主 activity 結點下添加<meta-data>信息,否則在 Unity 導出 APK 時會報找不到manifest 文件的錯誤信息】
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
3、添加 Unity 的 classes.jar 引用
使用過 Eclipse 開發 Android 插件的應該都知道,需要導入 Unity 自帶的 classes.jar 包才能對 Unity 的封裝方法進行引用。classes.jar 目錄位置如下:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\classes.jar
直接烤到 Android Studio 的 app\libs 目錄下,然后再 build.gradle 文件下添加依賴:
完成這些步驟,我們就可以使用 Unity 提供的封裝方法了。
4、實現 Unity 所依附的 UnityPlayerActivity
在 Unity 中,整個應用都基于 UnityPlayerActivity,我們可以對自己的 Activity 繼承 UnityPlayerActivity 實現我們一些特定的需求,也就是我們需要為 Unity 項目提供的功能。具體的內容大家可以參考 qinyuanpei 前輩的這篇文章,里面詳細描述了怎樣對 Android 和 Unity 實現交互。
5、修改 build.gradle 文件,為導出 AAR 做最后準備
最后我們需要修改上面提到的 build.gradle 文件,指定我們需要導出的是 AAR 文件。
如果我們一開始新建的是一個 Project,那么默認導出的是一個 APK,所以我們需要對導出進行設定:
修改
apply plugin: 'com.android.application'
為
apply plugin: 'com.android.library'
刪掉
applicationId "com.xxx.xxx" //你的包名
最后我們得到的 gradle 文件是這樣的:
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile files('libs/classes.jar')
}
6、導出 AAR 文件
依次點擊 Build->Build APK 生成我們需要的 AAR 文件
生成的 AAR 文件會保存在 app\build\outputs\aar 目錄下,名為 app-debug.aar
7、移除classes.jar引用
導出的 AAR 文件中,會包含我們之前導進去的 classes.jar,但是在 Unity 中已經存在該文件,我們需要把它移除,不然會發生沖突。我們用解壓軟件把 AAR 文件以壓縮包的形式打開,刪除 libs 下的 classes.jar 文件即可。
8、把 AAR 文件導入 Unity 項目中
最后就是把我們生成的 AAR 文件導入到 Unity 項目中了,把 AAR 文件和 AndroidManifest 文件直接拷到 Plugins/Android 下即可
至此我們就完成了 Android 插件的引入。
后續的交互操作,網上有很多教程,我這里就不再贅述了。
后續:
我在測試時導出的 apk 文件在安裝的時候總是安裝失敗,在搗鼓了一天后發現這是 Unity 指定的安裝路徑的問題:
在 PlayerSetting 下的 Android 配置中有一項 Install Location,默認為 Prefer External,當我改成 Automatic 后問題就沒有了,具體是什么原因,還沒弄懂,先 mark 下,有知道的朋友歡迎留言交流。