Unity調(diào)用安卓方法實(shí)現(xiàn)安裝apk文件
記錄下,個(gè)人之前做一個(gè)項(xiàng)目的時(shí)候碰到一個(gè)需求,安卓端的app中需要做冷更新,這里簡(jiǎn)單解釋下冷更新,其實(shí)就是拿當(dāng)前的app的版本號(hào)比對(duì)服務(wù)器上的版本號(hào),如果服務(wù)器上有新版本,就下載新版本的apk,然后安裝替換掉整個(gè)app,就是冷更新。但是具體實(shí)現(xiàn)的時(shí)候碰到個(gè)問題,因?yàn)槭窃诎沧科脚_(tái)的,下載apk沒啥問題(網(wǎng)上教程很多自行查找,我這里就不多說了)但是呢下載完后不可能讓用戶自己去找到這個(gè)apk保存的位置安裝,因此需要等下載完成后當(dāng)前的unity制作的app直接調(diào)用安卓的安裝apk的方法直接彈出安裝新版的apk。但是呢unity中沒提供調(diào)用安卓方法安裝apk文件,因此需要自己去Android Studio上實(shí)現(xiàn),然后放入unity中再調(diào)用
下面文檔中的aar包可以關(guān)注我后,私信獲取內(nèi)容,編碼:40001
注意:提供的aar是后來制作的,因此調(diào)用時(shí),方法名等和文檔中的不一致,Unity調(diào)用請(qǐng)看提供的示例代碼文件,另外如果使用了我提供的包,請(qǐng)把a(bǔ)pp-debug.aar和android-support-v4.jar兩個(gè)問題都放置Unity工程的Assets文件夾中,放置android-support-v4.jar文件后,文檔中在Unity工程中配置的Custom Main Gradle Template和Custom Gradle Properties Template兩個(gè)文件都可以不用配置,并且PublishingSettings中也不用勾選
接下來說下怎么實(shí)現(xiàn)的,先說Android Studio上的操作:
首先自己新建一個(gè)android工程

然后選中我們的工程,紅框的位置就是選中工程,綠框的位置默認(rèn)是Android可以點(diǎn)小箭頭下來改成Project(看個(gè)人習(xí)慣)

然后創(chuàng)建一個(gè)Module點(diǎn)擊File->New->New Module

選擇Android Library,Module名字自己改

完成后這邊會(huì)多這個(gè)文件夾

接下來我們創(chuàng)建一個(gè)空的文件夾叫tempLibs,然后把Unity引擎中的classes.jar拷貝進(jìn)去,classes.jar文件在引擎的這個(gè)路徑中Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

選中classes.jar文件右鍵點(diǎn)擊Add As Library,導(dǎo)入到安卓工程的module中

然后打開build.gradle文件,注意是Module里面的這個(gè)文件,不是整個(gè)安卓工程中的文件,如下圖我的module是InstallApk,所以是下面的紅框中標(biāo)的這個(gè),不是再下面那個(gè),打開之后右側(cè)紅框中的默認(rèn)是implementation改成compileOnly,這邊簡(jiǎn)單解釋下,導(dǎo)入外部的包,默認(rèn)implementation關(guān)鍵詞,最后打包aar時(shí)會(huì)將這個(gè)外部包一起打包進(jìn)去,但是最后我們是在unity中使用,因此unity中打包apk時(shí)已經(jīng)有一個(gè)classes.jar的包去調(diào)用了,所以如果打包這個(gè)aar包里在加入classes.jar的內(nèi)容的話,會(huì)重復(fù)起沖突,因此需要改成compileOnly關(guān)鍵詞,這樣打aar的時(shí)候不會(huì)將classes.jar這個(gè)外部包打包進(jìn)去

接著我們打開InstallApk下的src,如果里面有res文件夾的話直接右鍵創(chuàng)建一個(gè)provider_paths.xml文件(如果沒有res文件夾的話可以自己創(chuàng)建一個(gè),或者直接創(chuàng)建xml應(yīng)該會(huì)自動(dòng)創(chuàng)建這個(gè)文件夾,如果沒創(chuàng)建就自己創(chuàng)建了放進(jìn)去)

打開剛才創(chuàng)建的這個(gè)xml文件,然后將下面這段內(nèi)容替換進(jìn)去
<?xml version="1.0" encoding="utf-8"?>
<paths>
? ?<external-path
? ? ? ?name="publicDir"
? ? ? ?path="." />
</paths>

接著打開InstallApk下的AndroidManifest.xml文件,然后將下面這段內(nèi)容復(fù)制進(jìn)去,不過需要注意的是(見下圖)右側(cè)兩個(gè)紅框中打的路徑是前面創(chuàng)建的xml文件的路徑,因此如果命名不一樣的話,需要這邊改成你創(chuàng)建的路徑和文件名
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
? ?package="com.example.mylibrary">
? ?<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
? ?<application>
? ? ? ?<meta-data
? ? ? ? ? ?android:name="com.google.android.actions"
? ? ? ? ? ?android:resource="@xml/provider_paths" />
? ? ? ?<!-- 適配android 7.0以及以上更新APK路徑 -->
? ? ? ?<provider
? ? ? ? ? ?android:name="androidx.core.content.FileProvider"
? ? ? ? ? ?android:authorities="${applicationId}.fileprovider"
? ? ? ? ? ?android:exported="false"
? ? ? ? ? ?android:grantUriPermissions="true">
? ? ? ? ? ?<meta-data
? ? ? ? ? ? ? ?android:name="android.support.FILE_PROVIDER_PATHS"
? ? ? ? ? ? ? ?android:resource="@xml/provider_paths" />
? ? ? ?</provider>
? ?</application>
</manifest>

好了到這里就準(zhǔn)備工作做好了,接下去就是編寫java腳本(安裝apk的方法了)
我們還是打開InstallApk->src->main,然后選中com.xxx.xxx(你自己創(chuàng)建時(shí)的名字是什么就是什么)右鍵New->Java Class,創(chuàng)建一個(gè)Java類,類名自己定義,我這邊定義的是Install

后面就將代碼復(fù)制進(jìn)去(代碼在后面),但是需要注意下圖紅框中的內(nèi)容是自動(dòng)生成,復(fù)制我的代碼的時(shí)候不要替換掉你的類名和package名

輸入完代碼保存文件后,就可以點(diǎn)擊Build->Make Project,打包aar文件了

打包完成后,會(huì)在InstallApk->build->outputs->aar的文件夾下生成一個(gè)aar文件

到這部Android Studio上的操作就全部完成了,接下來我們找到這個(gè)aar文件,拷貝到你需要使用的unity工程的Plugins文件夾下

然后在unity工程的ProjectSettings->Player->PublishingSettings里開啟兩個(gè)自定義文件的勾,見下圖,Custom Main Gradle Template和Custom Gradle Properties Template這兩個(gè)勾選上后會(huì)在Plugins->Android文件夾中生成兩個(gè)文件

然后分別打開這兩個(gè)文件進(jìn)行修改,先打開gradleTemplate.properties文件,在最后加入下面在行語句,加入完保存關(guān)閉
android.overridePathCheck=true
android.useAndroidX=true
android.enableJetifier=true

再打開mainTemplate.gradle文件,在dependencies后面的大括號(hào)中加入下面的語句,加入完保存關(guān)閉
implementation 'androidx.appcompat:appcompat:1.2.0'

然后unity中調(diào)用aar包里的安卓apk方法代碼如下,不過需要注意的是下圖第一個(gè)紅框中的內(nèi)容是你安卓工程里寫的java腳本中第一行的package加上一個(gè)類名,com.xxx.xxx.類名,第二個(gè)紅框中的字符串是你在那個(gè)java類中寫的靜態(tài)的安裝apk的方法名,傳的參數(shù)是你apk的路徑
