欢迎光临散文网 会员登陆 & 注册

Unity调用安卓方法实现安装apk文件

2022-02-03 23:59 作者:TenderRain-  | 我要投稿

记录下,个人之前做一个项目的时候碰到一个需求,安卓端的app中需要做冷更新,这里简单解释下冷更新,其实就是拿当前的app的版本号比对服务器上的版本号,如果服务器上有新版本,就下载新版本的apk,然后安装替换掉整个app,就是冷更新。但是具体实现的时候碰到个问题,因为是在安卓平台的,下载apk没啥问题(网上教程很多自行查找,我这里就不多说了)但是呢下载完后不可能让用户自己去找到这个apk保存的位置安装,因此需要等下载完成后当前的unity制作的app直接调用安卓的安装apk的方法直接弹出安装新版的apk。但是呢unity中没提供调用安卓方法安装apk文件,因此需要自己去Android Studio上实现,然后放入unity中再调用

下面文档中的aar包可以关注我后,私信获取内容,编码:40001

注意:提供的aar是后来制作的,因此调用时,方法名等和文档中的不一致,Unity调用请看提供的示例代码文件,另外如果使用了我提供的包,请把app-debug.aar和android-support-v4.jar两个问题都放置Unity工程的Assets文件夹中,放置android-support-v4.jar文件后,文档中在Unity工程中配置的Custom Main Gradle Template和Custom Gradle Properties Template两个文件都可以不用配置,并且PublishingSettings中也不用勾选

接下来说下怎么实现的,先说Android Studio上的操作:

首先自己新建一个android工程

然后选中我们的工程,红框的位置就是选中工程,绿框的位置默认是Android可以点小箭头下来改成Project(看个人习惯)

然后创建一个Module点击File->New->New Module

选择Android Library,Module名字自己改

完成后这边会多这个文件夹

接下来我们创建一个空的文件夹叫tempLibs,然后把Unity引擎中的classes.jar拷贝进去,classes.jar文件在引擎的这个路径中Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

选中classes.jar文件右键点击Add As Library,导入到安卓工程的module中

然后打开build.gradle文件,注意是Module里面的这个文件,不是整个安卓工程中的文件,如下图我的module是InstallApk,所以是下面的红框中标的这个,不是再下面那个,打开之后右侧红框中的默认是implementation改成compileOnly,这边简单解释下,导入外部的包,默认implementation关键词,最后打包aar时会将这个外部包一起打包进去,但是最后我们是在unity中使用,因此unity中打包apk时已经有一个classes.jar的包去调用了,所以如果打包这个aar包里在加入classes.jar的内容的话,会重复起冲突,因此需要改成compileOnly关键词,这样打aar的时候不会将classes.jar这个外部包打包进去

接着我们打开InstallApk下的src,如果里面有res文件夹的话直接右键创建一个provider_paths.xml文件(如果没有res文件夹的话可以自己创建一个,或者直接创建xml应该会自动创建这个文件夹,如果没创建就自己创建了放进去)

打开刚才创建的这个xml文件,然后将下面这段内容替换进去

<?xml version="1.0" encoding="utf-8"?>
<paths>
   <external-path
       name="publicDir"
       path="." />
</paths>


接着打开InstallApk下的AndroidManifest.xml文件,然后将下面这段内容复制进去,不过需要注意的是(见下图)右侧两个红框中打的路径是前面创建的xml文件的路径,因此如果命名不一样的话,需要这边改成你创建的路径和文件名

<?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>


好了到这里就准备工作做好了,接下去就是编写java脚本(安装apk的方法了)

我们还是打开InstallApk->src->main,然后选中com.xxx.xxx(你自己创建时的名字是什么就是什么)右键New->Java Class,创建一个Java类,类名自己定义,我这边定义的是Install

后面就将代码复制进去(代码在后面),但是需要注意下图红框中的内容是自动生成,复制我的代码的时候不要替换掉你的类名和package名

输入完代码保存文件后,就可以点击Build->Make Project,打包aar文件了

打包完成后,会在InstallApk->build->outputs->aar的文件夹下生成一个aar文件

到这部Android Studio上的操作就全部完成了,接下来我们找到这个aar文件,拷贝到你需要使用的unity工程的Plugins文件夹下

然后在unity工程的ProjectSettings->Player->PublishingSettings里开启两个自定义文件的勾,见下图,Custom Main Gradle Template和Custom Gradle Properties Template这两个勾选上后会在Plugins->Android文件夹中生成两个文件

然后分别打开这两个文件进行修改,先打开gradleTemplate.properties文件,在最后加入下面在行语句,加入完保存关闭

android.overridePathCheck=true

android.useAndroidX=true

android.enableJetifier=true

再打开mainTemplate.gradle文件,在dependencies后面的大括号中加入下面的语句,加入完保存关闭

implementation 'androidx.appcompat:appcompat:1.2.0'

然后unity中调用aar包里的安卓apk方法代码如下,不过需要注意的是下图第一个红框中的内容是你安卓工程里写的java脚本中第一行的package加上一个类名,com.xxx.xxx.类名,第二个红框中的字符串是你在那个java类中写的静态的安装apk的方法名,传的参数是你apk的路径


Unity调用安卓方法实现安装apk文件的评论 (共 条)

分享到微博请遵守国家法律