unity教程||Unity调用安卓方法实现安装apk文件

这篇具有很好参考价值的文章主要介绍了unity教程||Unity调用安卓方法实现安装apk文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

接下来说下怎么实现的,先说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名

package com.android.installapk;

import android.content.Intent;

import android.net.Uri;

import android.os.Build;

import android.util.Log;

import androidx.core.content.FileProvider;

import java.io.File;

import com.unity3d.player.UnityPlayer;

public class Install {

public static boolean InstallApk(String apkPath){

File apkFile = new File(apkPath);

if (apkFile.exists()) {

Intent intent = new Intent(Intent.ACTION_VIEW);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

Uri contentUri = FileProvider.getUriForFile(UnityPlayer.currentActivity, UnityPlayer.currentActivity.getPackageName()+".fileprovider", apkFile);

intent.setDataAndType(contentUri, "application/vnd.android.package-archive");

} else {

intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

}

UnityPlayer.currentActivity.startActivity(intent);

return true;

} else {

Log.d("TAG", "文件不存在"+apkPath);

return false;

}

}

}

输入完代码保存文件后,就可以点击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的路径

public static bool InstallApk(string apkPath)

{

AndroidJavaClass javaClass = new AndroidJavaClass("com.android.installapk.Install");

return javaClass.CallStatic<bool>("InstallApk", apkPath);

} 文章来源地址https://www.toymoban.com/news/detail-468998.html

到了这里,关于unity教程||Unity调用安卓方法实现安装apk文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity开发Android,unity直接打开其他apk,并传参数;以及接收参数的方法

    一,获取参数 要在Unity中实现Android端打开另一个应用程序并传递参数,你可以使用Android的Intent机制。  在需要启动另一个应用程序的地方调用这个方法。例如,你可以在按钮点击事件中调用它: 二,unity c#获取参数 Unity中开发的应用程序被Android的另一个应用程序传递参数时

    2024年01月21日
    浏览(42)
  • Unity 安装APK后出现两个图标问题

    注意:这个方法合适原本Assets/Plugins/Android路径下没有AndroidManifest清单文件的情况,如果原本这个路径下就存在清单文件,你只需要查看一下清单文件是不是有内容重复就行

    2024年01月22日
    浏览(34)
  • Unity3D:调用安卓摄像头拍照

    操作步骤:创建脚步并挂载到Main Camera上 仍未解决的问题:导入到安卓平台测试时,拍照按钮不能随着屏幕旋转而变换位置; 拍照时会把拍照按钮也截进去。

    2024年02月06日
    浏览(50)
  • unity把公共方法在Inspector 界面上实现一个按钮点击直接调用的最快最方便的方式

    在unity界面用显示的样式如下图: 没有参数的直接是一个按钮,有参数的会在下边加一个参数,点击Invoke按钮可以调用这个方法。 要实现上边的效果需要脚本继承MonoBehaviour,并且引用 using Sirenix.OdinInspector

    2024年02月16日
    浏览(47)
  • 使用unity hub安装unity并配置安卓环境

            总结,最方便快速的方法就是使用unity hub来安装我们需要的unity版本,会自动帮我们配置好安卓环境。         首先去官网下载hub并安装,然后通过hub来安装。点击右上角的\\\"安装编辑器\\\",在打开的页面点击\\\"存档\\\",再点击\\\"下载存档\\\",在打开的官网下载界面找到我们

    2024年02月12日
    浏览(51)
  • Unity VR Pico apk安装失败:INSTALL_FAILED_UPDATE_INCOMPATIBLE

    PICO4企业版。安装apk,报错“安装失败。(所属的Unity项目打包的apk,被我在同一台pico4安装了20次+) PIco4发布使用UNITY开发的Vr应用,格式为apk,安装的时候发生解析错误_pico安装apk-CSDN博客 去Android---data文件夹下找到,该该应用的文件夹 。整个删掉。然后再安装apk,应该就可

    2024年02月03日
    浏览(72)
  • PIco4发布使用UNITY开发的Vr应用,格式为apk,安装的时候发生解析错误

    参考链接 : adb install APK报错Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]_调用者不被允许测试的测试程序_小龙在山东的博客-CSDN博客 Pico Developer Answers 完成项目配置 - PICO 开发者平台 如何将apk、obb文件打包至pico设备中 - 掘金 Requires newer sdk version #30 (current version is #28) · Issue #633

    2024年02月04日
    浏览(59)
  • Unity的配置文件在安卓路径下使用的方法

    之前我做过的很多使用配置文件的Unity项目,后面的有些项目也有在安卓路径下读取json文件的需求。这几天有个需求是获取在安卓路径下配置文件里的数据,我在网上查了一些案例,简单实现了这个需求,下面将这个方法在这里记录一下。 1.建立一个Unity项目,将版本转换为

    2024年02月07日
    浏览(38)
  • unity调用其它脚本函数方法

       调用    

    2024年02月07日
    浏览(51)
  • unity 停止调用InvokeRepeating()的方法

    可以使用CancelInvoke()函数来停止InvokeRepeating()的调用。示例如下: 这个示例代码中,首先在Start()函数中调用InvokeRepeating()函数来循环调用一个自定义的函数RepeatFunction(),时间间隔为repeatTime变量的值。然后在Update()函数中监听键盘按键操作,如果检测到用户按下了空格键,就调

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包