前言 項目之前使用Eclipse導出的jar文件來做與Android交互,最近因為工作需要需使用Android Studio的aar文件,網上參考了部分文章,也結合自己的理解重新整理一下具體的方法,通過寫一個測試Demo來表述Android Studio創建aar的過程與及Unity如何使用aar文 ...
前言
項目之前使用Eclipse導出的jar文件來做與Android交互,最近因為工作需要需使用Android Studio的aar文件,網上參考了部分文章,也結合自己的理解重新整理一下具體的方法,通過寫一個測試Demo來表述Android Studio創建aar的過程與及Unity如何使用aar文件,希望對剛好有這個需求的人有部分幫助吧。
版本信息
Unity 5.3.1f1,
Android Studio 2.2.3
Android Studio導出可供Unity使用的aar插件
一、 創建Android Studio工程
1)第一步,點擊File->New->New Project,打開"Create New Project"對話框,選擇合適的Application name與Company Domain,保證Package name與Unity項目中的Bundle Idenifier一致![](http://images2015.cnblogs.com/blog/690249/201702/690249-20170210163517729-1192380626.png)
![](http://images2015.cnblogs.com/blog/690249/201702/690249-20170210163534338-1073527191.png)
![](http://images2015.cnblogs.com/blog/690249/201702/690249-20170210163552385-1294663666.png)
二、添加Unity的classes.jar引用
1)把Unity引擎目錄下中的”Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar“文件拷貝至Android Studio工程中的libs目錄
2)右擊"Project"視圖,打開"Open Module Settings", 添加“classes.jar”依賴
三、編寫Android側代碼(修改MainActivity代碼)
import android.os.Bundle; import android.widget.Toast; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } // 顯示Toast消息 public void ShowToast(final String message){ runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); } }); } // 返回一個字元串(靜態方法) public static String GetInformation() { return "This is a Plugin's content!"; } }
四、修改build.gradle,設置工程導出為aar
1)apply plugin: 'com.android.application' 修改為 apply plugin: 'com.android.library'2)刪除 applicationId "com.zcode.unityandroidplugindemo"
3)修改後的build.gradle為
apply plugin: 'com.android.library' android { compileSdkVersion 24 buildToolsVersion "24.0.1" defaultConfig { minSdkVersion 18 targetSdkVersion 24 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.1.1' testCompile 'junit:junit:4.12' compile files('libs/classes.jar') }
五、修改AndroidManifest.xml
1)修改樣式 我們需要在 AndroidManifest 中的 application 結點修改應用的主樣式為系統樣式,因為導出的 AAR 文件將不帶自定義的樣式,在我們的 Unity 項目中生成最終 apk 的時候會出現樣式找不到的錯誤。![](http://images2015.cnblogs.com/blog/690249/201702/690249-20170210165000713-267452562.png)
![](http://images2015.cnblogs.com/blog/690249/201702/690249-20170210165105104-99922067.png)
六、導出供Unity使用的*.aar文件
1)點擊“Build -> Build APK”,生成aar文件
2)由於Unity在打包APK時會自動包含自身的classes.jar,所以需使用壓縮軟體打開aar文件刪除libs目錄下的classes.jar文件
Unity導入插件,並調用
一、創建Unity工程
二、導入插件到Unity工程中
1)新建Plugins目錄與Android子目錄 2)拷貝aar文件與AndroidManifest.xml文件至Android目錄下![](http://images2015.cnblogs.com/blog/690249/201702/690249-20170210165846979-1035914710.png)
三、編寫測試代碼
1)新建一個“Call.cs”的腳本文件
2)在“Call.cs”腳本中編寫調用Android側代碼
using UnityEngine; using System.Collections; public class Call : MonoBehaviour { string information_ = null; void OnGUI() { //調用顯示一個文本為“Hello World!”的Toest if(GUI.Button(new Rect(0, 0, 200, 20), "Show Toest - Hello World!")) { //Unity側調用Android側代碼 using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) { //調用成員方法 jo.Call("ShowToast", "Hello World!"); } } } //獲得插件側的返回字元串 if (GUI.Button(new Rect(0, 40, 200, 20), "Get Plugin's Information")) { //Unity側調用Android側代碼 using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) { //調用靜態方法 information_ = jo.CallStatic<string>("GetInformation"); } } } //顯示返回的字元串 GUI.Label(new Rect(220, 40, Screen.width - 220, 20), information_); } }
四、導出APK
1)設置Bundle Identifier(保持與插件PackageName一致) 2)設置合適的Minimum API Level(保持與插件)五、測試
Demo地址
http://pan.baidu.com/s/1dFxc7JF
結尾
Android側調用Unity側的方式在此就不多做贅述,網上相關的文章也很多。