上一篇我們講了unity如何調用jar包 http://www.cnblogs.com/Jason-c/p/6743224.html,
現在我們介紹一下怎么生成aar包和unity怎么調用aar
一、通過Android studio生成aar
首先,在Android studio上面新建一個工程。

選擇你要發布的Android 版本,注意:要和unity保持一致。

選擇empty activity

默認的activity name不用動,直接點finish

找到unity的安裝路徑D:\****\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

復制class.jar到Android studio\Project\app\libs

在Android studio的file 找到Project Structure... 點擊

接下來找到app,找到dependdencies,點擊右邊的+號,選擇第二個 2 file dependency

找到 libs下剛導進去的class.jar, 點擊OK

接下來就是在MainActivity里編寫接口了

將MainActivity繼承UnityPlayerActivity,然后刪掉setContentView(R.layout.activity_main); 如果不繼承UnityPlayerActivity也是可以的,
類似這樣

或者這樣

選擇其中的一種編寫來接口
package com.hello.world;
import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//接口
public String test()
{
Log.v("測試","成功");
return "測試成功";
}
}
在AndroidManifest.XML中添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> 
OK,目前為止准備工作已經完成了,接下來該打aar包了
點擊Build/Build APK

當Android studio右上角顯示這個時,說明已經build成功了

好了,結束了,已經打包好了arr包,就在outputs下,跟打jar包相比是不是省事多了

二、unity調用aar
新建一個工程,將unity切換到Android平台,點擊player Setting

將unity的包名和Android的版本設置的和aar包的一樣

在assets先創建Plugins/Android,主要名字別寫錯了,在Android studio中找到aar包,把它放在Android文件夾下,arr和jar一樣,名字可以隨意改,
把Android studio里的AndroidManifest.XML也放到unity的Plugins/Android路徑下。

添加腳本test,保存場景為test

接下來的這一步非常關鍵:
在unity里雙擊你的arr包,如果不能打開,就下一個解壓工具,雙擊app-debug后會彈出這個框

找到libs,打開

刪掉里面的class.jar, 關閉窗口,不刪掉會報錯的同志們。

然后在test腳本里添加如下代碼
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class Test : MonoBehaviour { 6 7 void OnGUI() 8 { 9 //方法一 10 try { 11 var javaClass = new AndroidJavaObject("com.hello.world.MainActivity"); 12 string value1=javaClass.Call<string>("test"); 13 GUI.Label (new Rect(10,10,500,500),value1); 14 } catch (System.Exception ex) { 15 GUI.Label (new Rect(10,10,500,500),ex.ToString()); 16 } 17 //方法二 18 try { 19 AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); 20 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity"); 21 string value2=jo.Call<string> ("test"); 22 GUI.Label(new Rect(20,20,500,500),value2); 23 } catch (System.Exception ex) { 24 GUI.Label (new Rect(20,20,500,500),ex.ToString()); 25 } 26 27 } 28 }
打包場景,搞定。
Android模擬器運行結果:

如果你按我上面的步驟進行的,或者看其他人寫的教程,Unity在Build時都一樣報錯,那么恭喜你,你將終結這個噩夢。
1、找到Android studio工程里的values/styles.xml

2、打開后是這樣子的

3、同志們,重點來了,簡單粗暴一點,將styles.xml里的東西統統刪掉,只留下如下內容

OK了,重新生成aar包,然后放心的扔到Unity了Build去吧,絕對不會再有問題了。
求關注啊,同志們
2017.11.3 Update
現在只想優優雅雅的說聲:“wo ca”
突破我的認知的了,
之前認為unity場景中存在多個 AndroidManifast.XML 時,會沖突
之前認為unity場景中導入aar包的時候必須在/Plugins/Android路徑下添加其AndroidManifast.XML
今天測試發現,這兩種問題都不存在了,當時可是折磨了半個月呀,難道是unity版本更新導致問題解決了?
不過目測不能通過
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity"); string value2=jo.Call<string> ("test");
這種方法調用,報空。
我是用下面的方法調用成功的
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class NewBehaviourScript : MonoBehaviour { 6 7 void OnGUI() 8 { 9 try { 10 AndroidJavaObject jc = new AndroidJavaObject ("com.hello.world.MainActivity"); 11 string value2=jc.Call<string> ("test"); 12 GUI.Label(new Rect(20,20,500,500),value2); 13 } catch (System.Exception ex) { 14 GUI.Label (new Rect(20,20,500,500),ex.ToString()); 15 } 16 } 17 }
