02-Unity安卓交互之导出aar包

互相调用模式之导出aar包

开发环境:

Win10 64bit

Unity2018.3.5f1

Android Studio 3.0.1

1.创建工程

  • 打开Android Studio -> Start a new Android Studio Project -> Empty Activity , 一路Next

    Application name: ‘UnityTest’

    Company domain: ‘ffim.com’

  • File -> New Module -> Android Library

    Library取名testlibrary

  • 选中testlibrary/java/com.xxx.testlibrary -> 右键 -> New/Activity/Empty Activity

    勾选 Launcher Activity , 其他的默认

  • 删除testlibrary/res/layout/activity_main.xml -> OK -> Delete Anyway

  • 删除testlibrary/java/com.xxx.testlibrary/MainActivityonCreate中的一行代码:

    setContentView(R.layout.activity_main);
    
  • 在Unity2019.4.30安装目录下,找到classes.jar和UnityPlayerActivity.java文件

    C:\Program Files\Unity\2019.4.30f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
    C:\Program Files\Unity\2019.4.30f1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player\UnityPlayerActivity.java

    1. 注意:https://blog.csdn.net/zhangay1998/article/details/127838647
    2. 由于Unity在2019.3的新版本之后,Unity的class包中的内容发生了变化。
    3. 官方将UnityPlayerActivity.java单独做了一个文件夹分离了出来,所以Unity2019.3版本之后就不能跟之前一样,只复制安装磁盘 \Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes路径下的jar包到AS中了
    4. 还需要将UnityPlayerActivity.java也复制到AS中去才行。
    5. 打开UnityPlayerActivity.java添加如下代码:
      import com.unity3d.player.IUnityPlayerLifecycleEvents;
      import com.unity3d.player.UnityPlayer;
  • Android Studio 切换到 Project视图, 将classes.jar复制粘贴到UnityTest/testlibrary/libs目录

  • 右键classes.jar -> Add As Library -> Add to module -> testlibrary -> OK

2.修改代码

  • Android Studio 切换到 Android 视图, 修改 testlibrary/manifests/AndroidManifest.xml

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
    
  • 选中testlibrary/java/com.xxx.testlibrary/MainActivity

    默认继承自AppCompatActivity,改为继承自UnityPlayerActivity

    编辑器会自动import com.unity3d.player.UnityPlayerActivity;

    请注意这里,我可以集成UnityPlayerActivity,也可以不继承。这里集成的话就要在Manifest文件中设置主Activity,如果不需要用到activity,直接使用AndroidJavaObject之类的在uniyt创建的话,就可以不继承这个UnityPlayerActivity,自然也就不需要任何Manifest文件了。

    随后再添加两个自定义的加减法: Add 和 Minus

    import com.unity3d.player.UnityPlayerActivity;
    
    public class MainActivity extends UnityPlayerActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        public int Add(int a, int b) {
            return a + b;
        }
    
        public int Minus(int a, int b) {
            return a - b;
        }
    
        public void CallUnity() {
            UnityPlayer.UnitySendMessage("Main Camera", "OnAndroidCallUnity", "hello, it`s from Android.");
        }
    }
    
  • Project 视图选中testlibrary, 菜单栏选择Build -> Make Module UnityTest.testlibrary, 等待编译完毕

3.整合aar包

这一步之前, 跟导出jar包的操作是完全一样的.

  • Project 视图打开目录 testlibrary/build/outputs/aar

    单独拷贝testlibrary-debug.aar文件出来,右键使用压缩软件打开

    删除压缩包下libs/classes.jar

    将压缩包中根目录下classes.jar移动到压缩包中libs目录下

    将压缩包根目录下AndroidManifest.xml拿出来修改,删除android:icon和android:label属性行, 再重新放回压缩包。

  • Project 视图打开目录 testlibrary/build/intermediates/manifests/full/debug

    拷贝AndroidManifest.xml文件出来

    打开AndroidManifest.xml,修改package="com.ffim.testlibrary"为unity工程的包名,全部小写。

  • 打开Unity,创建工程UnityAndroidTest , 切换到 Android平台,新建Test.cs, 代码如下:

    using UnityEngine;
    using UnityEngine.UI;
    
    public class Test : MonoBehaviour
    {
        AndroidJavaClass jc;
        AndroidJavaObject jo;
    
        public Text logText;
        void Start()
        {
            jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        }
    
        public void OnAddClick()
        {
            int result = jo.Call<int>("Add", 13, 34);
            logText.text += "加: " + result + "\n";
        }
        public void OnMinusClick()
        {
            int result = jo.Call<int>("Minus", 13, 34);
            logText.text += "减: " + result + "\n";
        }
        public void OnCallAndroidClick()
        {
            jo.Call("CallUnity");
        }
        public void OnAndroidCallUnity(string msg)
        {
            logText.color = new Color(Random.value, Random.value, Random.value);
            logText.text += msg + "\n";
        }
    }
    
  • Unity工程内新建Plugins/Android文件夹,将testlibrary-debug.aar和AndroidManifest.xml拷贝进去.

  • 打包测试。

    提示:如果把testlibrary-debug.aar和AndroidManifest.xml放到Plugins/Android/UnityTest目录下,打包后运行不正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值