互相调用模式之导出aar包
开发环境:
Win10 64bit
Unity2018.3.5f1
Android Studio 3.0.1
1.创建工程
-
打开Android Studio
->Start a new Android Studio Project
->Empty Activity
, 一路NextApplication 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/MainActivity
中onCreate
中的一行代码: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- 注意:https://blog.csdn.net/zhangay1998/article/details/127838647
- 由于Unity在2019.3的新版本之后,Unity的class包中的内容发生了变化。
- 官方将UnityPlayerActivity.java单独做了一个文件夹分离了出来,所以Unity2019.3版本之后就不能跟之前一样,只复制安装磁盘 \Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes路径下的jar包到AS中了
- 还需要将UnityPlayerActivity.java也复制到AS中去才行。
- 打开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目录下,打包后运行不正确。