菜鸡又来问问题了,关于整包更新

由于项目版本改动较大,加上更换了一些SDK,所以热更新不了这些东西。
就想着让游戏整包下载下来替换安装。前面几步都没啥问题。
通过jsb去服务器上下载apk包到本地。
下载后打印出的路径是/data/user/0/com.xxx.xxx/files/game.apk
现在问题是如何唤起apk的自动安装呢?有没有大佬做过这方面的东西?求指点

网上搜到的一些方法差不多都是自己配置应用的provider来解决。
奈何我这个安卓的菜鸡按照网上的方法来也无法实现该功能。主要是这个路径的配置问题,
provider里面的path根目录和我cocos打印出的应该不是同一个。
想知道path_xml里路径要怎么写"external-path path="???" name="???"/>"

2赞

android 项目里写调用apk的方法,然后 jsb 调用

恩,这个思路我知道,关键是实现的代码有没有参考。包括provider指向的XML文件怎么配置

如果你的下载地址是这个的话/data/user/0/com.xxx.xxx/files/game.apk
path="" 就行了, name的话,你随便写吧,name主要是通过通过代码去查找调用的,不过只安装个apk,就不需要了

按照大佬你的这个配置试了下,好像是唤起了安装提示。一闪而过看不清 :joy:


打印出下载111后就断掉了,问题应该是出在这行Uri apkUri = FileProvider.getUriForFile(MainActivity, BuildConfig.APPLICATION_ID + “.fileProvider”, file);

哈哈哈,一闪而逝,闪退了呗~
emmm 你这代码,没细看哈,权限请求那个逻辑对么,不应该在请求的回调中调用么····

不是闪退,就是底部类似授权的弹窗。一闪而过。然后就没有然后了。请求权限得逻辑没问题

授权弹窗是原生层的,只要弹出来了,不会一闪而过啊
会等待用户的操作

配上这个< files-path name=“xxx(随意)” path=".或指定路径xxx" />

直接打开个网页不就可以了,简单粗暴。


代码直接放方法:
/**
* 打开文件
* 兼容7.0
*
* @param context activity
* @param file File
* @param contentType 文件类型如:文本(text/html)
* 当手机中没有一个app可以打开file时会抛ActivityNotFoundException
*/
public static void startActionFile(Context context, File file, String contentType) throws ActivityNotFoundException {
if (context == null) {
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);//增加读写权限
intent.setDataAndType(getUriForFile(intent,context, file), contentType);
if (!(context instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);
}

public static Uri getUriForFile(Intent intent,Context context, File file) {
    if (context == null || file == null) {
        throw new NullPointerException();
    }
    Uri uri;
    if (Build.VERSION.SDK_INT >= 24) {
        uri = FileProvider.getUriForFile(context.getApplicationContext(), BuildConfig.APPLICATION_ID +".fileprovider", file);
        context.grantUriPermission(context.getPackageName(),uri,Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    } else {
        uri = Uri.fromFile(file);
    }
    return uri;
}

//install apk ,自己再改改吧。根据下载到本地存放目录,可能需要copy到到SD卡。。。
public static void installApk(final String apkPath) {
String path = FileUtils.getFileDir() + File.separator;
final String sdFilePath = path + “yourgame.apk”;
Log.w(“sdFilePath:”, sdFilePath);
_activity.runOnUiThread(new Runnable() {
@Override
public void run() {
File apkFile = new File(sdFilePath);
try {
if (!apkFile.exists())
AndroidToJs.copyAPK2SD(apkPath, sdFilePath);
else {
String srcApkMd5 = MD5.createMd5(apkPath);
Log.i(“md5”, “srcApkMd5=” + srcApkMd5);
if (!MD5.checkMd5(srcApkMd5, sdFilePath)) {
AndroidToJs.copyAPK2SD(apkPath, sdFilePath);
} else {
Log.i(“md5”, “md5对比一致”);
}
}
FileUtils.startActionFile(_activity, apkFile, “application/vnd.android.package-archive”);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}

1赞

android 静默安装,了解下,在打开游戏时怎么安装

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。