当前位置:   article > 正文

Android——APP更新工具包封装_apk更新工具

apk更新工具

APP内置更新版本

APP热修复,请参考 APP热修复 该章节

简单三步走!!!

第一步复制工具类 UtilApp.java

  1. package com.gsls.appinstall;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.net.Uri;
  5. import android.os.Build;
  6. import android.os.Environment;
  7. import androidx.core.content.FileProvider;
  8. import java.io.File;
  9. import java.io.FileOutputStream;
  10. import java.io.InputStream;
  11. import java.net.HttpURLConnection;
  12. import java.net.URL;
  13. public class UtilApp {
  14. /**
  15. * @param downloadUrl
  16. * @param savePath
  17. * @下载APK新版本
  18. */
  19. public static void downloadApp(final String downloadUrl, final String savePath) {
  20. new Thread() {
  21. public void run() {
  22. File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + savePath);//记得加扩展名
  23. file.getParentFile().mkdir();
  24. try {
  25. file.createNewFile();
  26. URL url2 = new URL(downloadUrl);
  27. HttpURLConnection conn = (HttpURLConnection) url2.openConnection();
  28. conn.connect();
  29. if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
  30. InputStream ips = conn.getInputStream();
  31. FileOutputStream fops = new FileOutputStream(file);
  32. byte[] buf = new byte[1024];
  33. int read = ips.read(buf);
  34. while (read != -1) {
  35. fops.write(buf, 0, read);
  36. fops.flush();
  37. read = ips.read(buf);
  38. }
  39. fops.close();
  40. ips.close();
  41. conn.disconnect();
  42. }
  43. } catch (Exception e) {
  44. }
  45. }
  46. }.start();
  47. }
  48. /**
  49. * 安装新的Apk
  50. * @param activity
  51. * @param apkPath 安装的apk路径
  52. */
  53. public static void installNewApk(Activity activity, String apkPath) {
  54. File apkfile = new File(apkPath);
  55. if (!apkfile.exists()) {
  56. return;
  57. }
  58. Intent intent = new Intent(Intent.ACTION_VIEW);
  59. intent.addCategory(Intent.CATEGORY_DEFAULT);
  60. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  61. //兼容android7.0以上版本
  62. Uri uri = Uri.fromFile(apkfile);
  63. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  64. //通过FileProvider创建一个content类型的Uri
  65. uri = FileProvider.getUriForFile(activity, "com.zuanuniverse.universe.fileprovider", apkfile);
  66. // 给目标应用一个临时授权
  67. intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  68. }
  69. intent.setDataAndType(uri, "application/vnd.android.package-archive");
  70. activity.startActivity(intent);
  71. }
  72. }

第二步:使用案列

  1. public class MainActivity extends AppCompatActivity {
  2. String url = "https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android3b8804.apk";
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
  8. @Override
  9. public void onClick(View v) {
  10. //下载 url 上的 apk 并放在 手机根目录中 GT 文件夹下
  11. UtilApp.downloadApp(url, "GT/最新版APP.apk");
  12. }
  13. });
  14. findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
  15. @Override
  16. public void onClick(View v) {
  17. //安装 手机根目录中 GT 文件夹下的 最新版APP.apk
  18. UtilApp.installNewApk(MainActivity.this, "0/**具体app路径**/GT/最新版APP.apk");
  19. }
  20. });
  21. }
  22. }

第三步:添加权限与xml

添加的权限:

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 写入手机权限 -->
  2. <uses-permission android:name="android.permission.INTERNET" /> <!-- 网络权限 -->
  3. <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 读取手机权限 -->

添加数据共享

  1. <application>
  2. ...
  3. <!--数据共享-->
  4. <provider
  5. android:name="androidx.core.content.FileProvider"
  6. android:authorities="自己包名.fileprovider"
  7. android:grantUriPermissions="true"
  8. android:exported="false">
  9. <meta-data
  10. android:name="android.support.FILE_PROVIDER_PATHS"
  11. android:resource="@xml/file_paths" />
  12. </provider>
  13. ...
  14. </<application>

创建xml目录并创建 file_paths.xml.xml 文件

  1. <paths>
  2. <external-path path="." name="external_storage_root" />
  3. </paths>

总结:简洁明了,非常实用。

本章节源码网址:https://github.com/1079374315/AppInstall

APP热修复,请参考 APP热修复 该章节

点个关注点个赞呗(〃'▽'〃),关注博主最新发布库:GitHub - 1079374315/GT

美帝 框架,让创造变得如此简单!

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号