??上篇文章我們實(shí)現(xiàn)了模塊化調(diào)用,運(yùn)用了模塊化設(shè)計(jì)思想和簡(jiǎn)化了調(diào)用流程,本篇文章講述UnityPlayerActivity類的繼承和使用。
??在一些深度交互場(chǎng)合,比如Activity切換、程序啟動(dòng)預(yù)處理等,這時(shí)可能會(huì)需要繼承Application和UnityPlayerActivity類,下面我們演示該功能。
??本示例需要引入U(xiǎn)nityPlayer類,該類位于Unity提供的Classes.jar包中[ 該包文件位置與Unity安裝路徑和版本有關(guān),如筆者使用Unity2020.3.15,Unity安裝在C盤默認(rèn)目錄,其路徑為:C:\Program Files\ Unity\ Hub\ Editor \2020.3.15f1c1\ Editor\ Data\ PlaybackEngines\ AndroidPlayer\ Variations\ il2cpp\ Release\ Classes],所以我們需要先引入該Jar包,首先直接復(fù)制Classes.jar包,然后在Android Studio工程app目錄(本示例使用模塊,所以我們將其放置到android2unity模塊的libs目錄下)的libs文件夾上鼠標(biāo)右鍵,在彈出的菜單中選擇Paste粘貼Classes.jar包。然后打開同級(jí)目錄的build.gradle文件,在其dependencies配置節(jié)中引入該Jar包,如圖1所示。
??在Unity2019以后的版本中,UnityPlayerActivity類不再位于Classes.jar包,而是以獨(dú)立的UnityPlayerActivity.java文件存在[ 該java文件位置與Unity安裝路徑和版本有關(guān),如筆者使用Unity2020.3.15,Unity安裝在C盤默認(rèn)目錄,其路徑為:C:\Program Files\ Unity\ Hub\ Editor\ 2020.3.15f1c1\ Editor\ Data\ PlaybackEngines\ AndroidPlayer\ Source\ com \unity3d\ player],將該文件復(fù)制到模塊代碼文件夾下。
??繼承Application類的示例代碼如下:
//代碼片斷1
//Java端代碼
package com.davidwang.android2unity;
import android.app.Application;
public class CustomApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
System.out.println("自定義Application");
}
}
??繼承UnityPlayerActivity類的示例代碼如下:
//代碼片斷2
//Java端代碼
package com.davidwang.android2unity;
import android.os.Bundle;
public class CustomActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
System.out.println("自定義Activity");
}
}
??正常導(dǎo)出aar包,將該aar包文件復(fù)制到Unity工程Assets/Plugins/Android目錄下。由于我們繼承了Application和UnityPlayerActivity類,實(shí)質(zhì)上是修改了應(yīng)用程序的入口,所以需要在Unity工程Assets/Plugins/Android目錄下新創(chuàng)建AndroidManifest.xml文件,文件內(nèi)容如下:
//代碼片斷3
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.davidwang.android2unity" >
<application
android:name="com.davidwang.android2unity.CustomApplication"
android:label="@string/app_name">
<activity android:name="com.davidwang.android2unity.CustomActivity"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="unity" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
</application>
</manifest>
??AndroidManifest.xml文件中第一行定義了應(yīng)用程序包名,所以Unity工程中的包名必須與該包名一致。然后將應(yīng)用程序入口(application節(jié))設(shè)置為自定義的CustomApplication;將啟動(dòng)Activity設(shè)置為自定義的CustomActivity,并設(shè)置了相應(yīng)的intent-filter過濾器。
??因?yàn)槲覀兪侵苯永^承了Unity的主Activity,所以不需要在Unity場(chǎng)景中做任何處理,打包到真機(jī)運(yùn)行,可以看到正確的自定義內(nèi)容輸出。
提示
????????在導(dǎo)入該aar包后,unity打包時(shí)會(huì)引發(fā)配置錯(cuò)誤,原因是aar包中BuildConfig.class類配置與unity項(xiàng)目配置有沖突。將導(dǎo)入的aar包名后綴改為rar,然后利用rar解壓工具直接打開(不是解壓出來),可以看到classes.jar包,鼠標(biāo)雙擊在另一個(gè)解壓界面中打開,然后點(diǎn)擊項(xiàng)目包名依次展開,可以看到在工程/模塊包名下有一個(gè)BuildConfig.class文件,鼠標(biāo)右鍵在彈出的菜單中選擇刪除,關(guān)閉新打開的解壓界面,回到原解壓界面時(shí)會(huì)彈出提示,選擇更新壓縮文件,完成包內(nèi)文件的刪除,最后再將rar后輟改為aar即可。文章來源:http://www.zghlxwxcb.cn/news/detail-788673.html
????????如果是打包為jar文件,處理方法類似,但其包內(nèi)沒有classes.jar包,可以直接點(diǎn)擊模塊包名依次展開,刪除BuildConfig.class文件,后續(xù)處理方法與前文一致。文章來源地址http://www.zghlxwxcb.cn/news/detail-788673.html
到了這里,關(guān)于Unity與Android交互通信系列(4)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!