上一篇我们讲了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 }