unity 安卓读取LitJson unity接入安卓sdk_xml

Unity中已嵌入Android的SDK,Unity可以很方便的和Android实现相互调用,对于第三方的SDK,只提供了与安卓交互,因此需要通过AndroidStudio与Unity进行交互;

unity 安卓读取LitJson unity接入安卓sdk_Android_02

扩展AndriodStudio中的Activity

使用AndroidStudio创建Android Library库工程,导出到Unity中作为插件使用;库文件中可以有自己的逻辑和调用;

unity 安卓读取LitJson unity接入安卓sdk_xml_03

一,在Unity中使用Android的方法

需要使用到AndroidJavaClass类和AndroidJavaObject

AndroidJavaObject类的一常用方法:

方法

描述

Call

调用Android代码中的非静态方法

CallStatic

调用Android代码中的静态方法

Get

获取Android代码中的非静态字段

GetStatic

获得Android代码中的静态字段

Set

设置Android代码中的非静态字段

SetStatic

设置Android代码中的静态字段

二,在AndroidStudio中调用Unity的方法

使用UnityPlayer.SendMessage方法,参数描述如下:

  • A:挂在哪个物体上
  • B:哪个方法
  • C:方法的参数

三,导出文件的描述

  • jar文件:包含有自己写的逻辑的类
  • xml文件:清单文件(签名,图标,安装文件名等)
  • res文件:清单文件中需要的一些资源
  • 还有一些更高级扩展的依赖文件

注意:XML文件里会包含一些包名设置,图标等等,会和Unity中的PlayerSetting里面的设置冲突,当有xml存在时,会使用xml中的设置;

unity 安卓读取LitJson unity接入安卓sdk_xml_04

第一步:AndroidStudio创建工程,设置并导出aar包
  • ①:创建一个空的AndroidStudio工程
  • ②:添加Android Libary
    步骤:切换到Project视图 ⇒ 右键 ⇒ New ⇒ Module ⇒ Android Libary ⇒ 命名
  • ③:导入Unity中Android支持的.jar包(classes.jar)
    文件地址:Unity安装目录\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
  • ④:导入UnityPlayerActivity.java文件到java/com.unity3d.player文件夹下
  • ⑤:添加MainActivity,继承自UnityPlayerActivity
  • ⑥:右键将classes.jar文件设置为Libary
    步骤:右键点击classes.jar文件 ⇒ Add as Libary
  • ⑦:切换到Android视图下将默认的AndroidMainfest.xml的Applaction内容复制到刚才创建的项目中的AndroidMainfest.xml中替换掉,报红就删掉
  • 修改Android:label = "AppName",会覆盖Unity中设置的程序名
  • 在***</intent-filter>的最外层添加<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
  • ⑧:导出aar包
    步骤:选中该项目 ⇒ 点击导航栏Bulid ⇒ Make Module
  • ⑨:找到Debug目录下的Build\outputs\aar.aar的压缩文件,将该文件使用压缩文件打开,删掉Libs下面的classes.jar文件删掉,将aar里面的xml文件,删掉一些通用设置,比如显示图标和App名称
  • ⑩:拷贝出项目文件\buid\intermediates\merged_manifests\debug\processDebugMainfest\Merged\AndroidMainfest.xml
第二步:将导出的aar包导入Unity中使用

一,将导出的aar包和拷贝出的AndroidMainfest复制到Unity工程的Assets\Plugins\Android文件夹下

二,获取AndroidStudio中激活的Activity

private static AndroidJavaClass unityPlayer;
private AndroidJavaObject curActivity;
private void Awake()
{
    unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    curActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
}