放下Eclipse,用Android Studio開發(fā)Unity Android插件

本篇使用的 IDE 版本為 Android Studio 1.5.1,Unity 5.4,使用更高的版本理論上不會(huì)有很大問題。


在 Unity5 出來之前,我一直都是使用 Eclipse 來寫 Android 插件為 Unity 提供支持,但隨著 Android Studio 的出現(xiàn),Google 官方宣布將停止對(duì) Eclipse ADT 的維護(hù),也就是說,用 Android Studio 來開發(fā) Android 應(yīng)用才是趨勢(shì)。而 Unity 也跟上了這點(diǎn),在 Unity5 推出時(shí),表示支持 Android AAR(Android Archive:是一個(gè) Android 庫(kù)項(xiàng)目的二進(jìn)制歸檔文件,為 Android 項(xiàng)目提供模塊化支持)格式的文件作為 Unity 插件,而 AAR 格式的文件,正可以使用 Android Stdio 進(jìn)行生成。

簡(jiǎn)單而言,AAR 文件我們可以理解成原來使用的 JAR+資源文件,我們不再需要在 Unity 項(xiàng)目中建立多個(gè)文件進(jìn)行插件目錄的構(gòu)建,我們只需要簡(jiǎn)單地把從 Android Studio 導(dǎo)出的 AAR 文件和對(duì)應(yīng)的 AndroidManifest 文件加到 Plugin/Android 目錄下即可。

我們看下具體操作:
1、新建
首先我們要在 Android Studio 上新建一個(gè)工程(Project)或模塊(Module),這個(gè)我想不用過多說明吧,會(huì)使用 IDE 的應(yīng)該都會(huì)。

2、修改樣式
我們需要在 AndroidManifest 中的 application 結(jié)點(diǎn)修改應(yīng)用的主樣式為系統(tǒng)樣式,因?yàn)閷?dǎo)出的 AAR 文件將不帶自定義的樣式,在我們的 Unity 項(xiàng)目中生成最終 apk 的時(shí)候會(huì)出現(xiàn)樣式找不到的錯(cuò)誤。


Android應(yīng)用主樣式

修改了配置清單后,我們還要對(duì) styles 文件進(jìn)行樣式的注釋移除,以防萬一。


styles目錄位置
styles文件,注釋即可

【Ps:除了樣式,我們還要在主 activity 結(jié)點(diǎn)下添加<meta-data>信息,否則在 Unity 導(dǎo)出 APK 時(shí)會(huì)報(bào)找不到manifest 文件的錯(cuò)誤信息】

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
meta-data

3、添加 Unity 的 classes.jar 引用
使用過 Eclipse 開發(fā) Android 插件的應(yīng)該都知道,需要導(dǎo)入 Unity 自帶的 classes.jar 包才能對(duì) Unity 的封裝方法進(jìn)行引用。classes.jar 目錄位置如下:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\classes.jar
直接烤到 Android Studio 的 app\libs 目錄下,然后再 build.gradle 文件下添加依賴:

gradle文件位置
添加依賴

完成這些步驟,我們就可以使用 Unity 提供的封裝方法了。

4、實(shí)現(xiàn) Unity 所依附的 UnityPlayerActivity
在 Unity 中,整個(gè)應(yīng)用都基于 UnityPlayerActivity,我們可以對(duì)自己的 Activity 繼承 UnityPlayerActivity 實(shí)現(xiàn)我們一些特定的需求,也就是我們需要為 Unity 項(xiàng)目提供的功能。具體的內(nèi)容大家可以參考 qinyuanpei 前輩的這篇文章,里面詳細(xì)描述了怎樣對(duì) Android 和 Unity 實(shí)現(xiàn)交互。

5、修改 build.gradle 文件,為導(dǎo)出 AAR 做最后準(zhǔn)備
最后我們需要修改上面提到的 build.gradle 文件,指定我們需要導(dǎo)出的是 AAR 文件。
如果我們一開始新建的是一個(gè) Project,那么默認(rèn)導(dǎo)出的是一個(gè) APK,所以我們需要對(duì)導(dǎo)出進(jìn)行設(shè)定:
修改

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、導(dǎo)出 AAR 文件
依次點(diǎn)擊 Build->Build APK 生成我們需要的 AAR 文件

導(dǎo)出

生成的 AAR 文件會(huì)保存在 app\build\outputs\aar 目錄下,名為 app-debug.aar

7、移除classes.jar引用
導(dǎo)出的 AAR 文件中,會(huì)包含我們之前導(dǎo)進(jìn)去的 classes.jar,但是在 Unity 中已經(jīng)存在該文件,我們需要把它移除,不然會(huì)發(fā)生沖突。我們用解壓軟件把 AAR 文件以壓縮包的形式打開,刪除 libs 下的 classes.jar 文件即可。

libs目錄

8、把 AAR 文件導(dǎo)入 Unity 項(xiàng)目中
最后就是把我們生成的 AAR 文件導(dǎo)入到 Unity 項(xiàng)目中了,把 AAR 文件和 AndroidManifest 文件直接拷到 Plugins/Android 下即可

文件目錄結(jié)構(gòu)

至此我們就完成了 Android 插件的引入。
后續(xù)的交互操作,網(wǎng)上有很多教程,我這里就不再贅述了。


后續(xù):
我在測(cè)試時(shí)導(dǎo)出的 apk 文件在安裝的時(shí)候總是安裝失敗,在搗鼓了一天后發(fā)現(xiàn)這是 Unity 指定的安裝路徑的問題:
在 PlayerSetting 下的 Android 配置中有一項(xiàng) Install Location,默認(rèn)為 Prefer External,當(dāng)我改成 Automatic 后問題就沒有了,具體是什么原因,還沒弄懂,先 mark 下,有知道的朋友歡迎留言交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容