unity调用安卓系统方法实现安装apk文件
准备工具: Android Studio 以及有一定安卓开发经验 我是用的 Android Studio 4.1 以及unity 2019.4.24f1c1 ,先写java 代码部分吧 java : 1、先建一个 新的Moudle 2、直接上代码吧,写一个静态方法
public static void installApk(Context mContext,String saveFileName)
{
File apkFile = new File(saveFileName);
if (!apkFile.exists()) {
return;
}
Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri apkUri = FileProvider.getUriForFile(mContext, "${applicationId}.fileProvider", apkFile);
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setDataAndType(apkUri, "application/vnd.android.package-archive");
} else {
i.setDataAndType(Uri.parse("file://" + apkFile.toString()),
"application/vnd.android.package-archive");
}
if (mContext.getPackageManager().queryIntentActivities(i, 0).size() > 0) {
mContext.startActivity(i);
}
}
说明: 第二个 传apk 下载路径(我是下载到可读写路径里面了), 里面 ${applicationId}.fileProvider 换上你的包名即可 3、配置AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ltt.apk">
<application
android:requestLegacyExternalStorage="true">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REPLACE_EXISTING_PACKAGE"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
</manifest>
4、注意在 res/xml中新建一个file_paths.xml 注意:UpApkRelease 是下载的apk 路径文件夹 5、接下来 编译 build 生成aar 包供 unity 使用即可 C# 部分: 6、unity 就很简单了,开单独线程 下载apk ,下载代码我就不贴了,直接上调用方法,有问题直接私聊哈
AndroidJavaObject context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass utilClass = new AndroidJavaClass("com.ltt.apk.TestApk");
utilClass.CallStatic("installApk", context, path);
如果这样的话,他会在 Android Studio 会报错,找不到androidx.core.content.FileProvider 是的,接下来才是重点 哈 因为unity导出的项目不支持androidx,所以需要unity支持androidx。 所以需要在unity 设置勾选上 勾选上,unity将会在asset\Plugins\Android生成两个文件gradleTemplate.properties和mainTemplate.gradle,需要分别修改这两个文件。 1、修改mainTemplate.gradle文件,在dependencies 块中添加一行代码: implementation 'androidx.appcompat:appcompat:1.2.0’如图所示:
2、修改gradleTemplate.properties文件 在后面添加:如图所示 android.overridePathCheck=true android.useAndroidX=true android.enableJetifier=true OK,大功告成 ,有什么问题的小伙伴 ,可以在评论区留下你的问题
|