Bugly自定义界面更新sdk

在这里插入图片描述
在app/build.gradle下配置

 android {
        defaultConfig {
          ndk {
            //设置支持的SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
          }
        }
      }
      dependencies {
          //注释掉原有bugly的仓库
          //implementation 'com.tencent.bugly:crashreport:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.3.2
          implementation 'com.tencent.bugly:crashreport_upgrade:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0
          implementation 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.2.0
      }

权限配置

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

activity配置

<activity
    android:name="com.tencent.bugly.beta.ui.BetaActivity"
    android:configChanges="keyboardHidden|orientation|screenSize|locale"
    android:theme="@android:style/Theme.Translucent" />

配置FileProvider

<provider
    android:name="android.support.v4.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>

在res目录新建xml文件夹,创建provider_paths.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- /storage/emulated/0/Download/${applicationId}/.beta/apk-->
    <external-path name="beta_external_path" path="Download/"/>
    <!--/storage/emulated/0/Android/data/${applicationId}/files/apk/-->
    <external-path name="beta_external_files_path" path="Android/data/"/>
</paths>

混淆配置

-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep class android.support.**{*;}

运行后注释掉

CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false); 

初始化

Bugly.init(getApplicationContext(), "注册时申请的APPID", false);

进入Bugly进行发布新应用即可

自定义activity更新界面
高级设置

  /**
         * true表示app启动自动初始化升级模块;
         * false不自动初始化
         */
        Beta.autoInit = true;
        /**
         * true表示初始化时自动检查升级
         * false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法
         */Beta.autoCheckUpgrade = true; /**
         * 设置升级周期为60s(默认检查周期为0s),60s内SDK不重复向后天请求策略
         */Beta.initDelay = 1 * 1000; /**
         * 设置通知栏大图标,largeIconId为项目中的图片资源;
         */Beta.largeIconId = R.mipmap.ic_launcher; /**
         * 设置状态栏小图标,smallIconId为项目中的图片资源id;
         */Beta.smallIconId = R.mipmap.ic_launcher; /**
         * 设置更新弹窗默认展示的banner,defaultBannerId为项目中的图片资源Id;
         * 当后台配置的banner拉取失败时显示此banner,默认不设置则展示“loading“;
         */Beta.defaultBannerId = R.mipmap.ic_launcher; /**
         * 设置sd卡的Download为更新资源保存目录;
         * 后续更新资源会保存在此目录,需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
         */
        Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); /**
         * 点击过确认的弹窗在APP下次启动自动检查更新时会再次显示;
         */Beta.showInterruptedStrategy = true; /**
         * 设置是否显示消息通知
         */Beta.enableNotification = true; /**
         * 使用默认弹窗
         */Beta.canShowApkInfo = true; /**
         * 关闭或开启热更新能力,默认开启
         */Beta.enableHotfix = false; /**
         * 只允许在MainActivity上显示更新弹窗,其他activity上不显示弹窗;
         * 不设置会默认所有activity都可以显示弹窗;
         */ //
        Beta.canShowUpgradeActs.add(MainActivity.class);

在application中初始化时设置监听,监听策略的收取


        Beta.upgradeListener = new UpgradeListener() {
            @Override
            public void onUpgrade(int ret,UpgradeInfo strategy, boolean isManual, boolean isSilence) {
                if (strategy != null) {
                    Intent i = new Intent();
                    i.setClass(getApplicationContext(), UpgradeActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i);
                } else {
                    Toast.makeText(BaseApplication.this, "没有更新", Toast.LENGTH_LONG).show();
                }
            }
        };



设置更新状态回调接口


        Beta.upgradeStateListener = new UpgradeStateListener() {
            //升级成功
            @Override
            public void onUpgradeSuccess(boolean isManual) {
            }

            //升级失败
            @Override
            public void onUpgradeFailed(boolean isManual) {
            }

            //升级检查
            @Override
            public void onUpgrading(boolean isManual) {
            }

            //下载完成
            @Override
            public void onDownloadCompleted(boolean b) {

            }

            //没有新版本
            @Override
            public void onUpgradeNoVersion(boolean isManual) {
            }
        };

新建一个UpgradeActivity

       /*获取策略信息,初始化界面信息*/
        title.setText(title.getText().toString() + Beta.getUpgradeInfo().title);
        version.setText(version.getText().toString() +Beta.getUpgradeInfo().versionName);
        content.setText(Beta.getUpgradeInfo().newFeature);
        String s = size.getText().toString();
        //将字节转换成M或KB或G
        String l = FormatUtil.sizeFormatString(Beta.getUpgradeInfo().fileSize);
        size.setText(s+l);
        /*为下载按钮设置监听*/
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DownloadTask task = Beta.startDownload();
                updateBtn(task);
                if (task.getStatus() == DownloadTask.DOWNLOADING) {
                    finish();
                }
            }
        });

        /*为取消按钮设置监听*/
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Beta.cancelDownload();
                finish();
            }
        });

/根据下载任务状态设置按钮/

    public void updateBtn(DownloadTask task) {
        switch (task.getStatus()) {
            case DownloadTask.INIT:
            case DownloadTask.DELETED:
            case DownloadTask.FAILED: {
                start.setText("开始下载");
            }
            break;
            case DownloadTask.COMPLETE: {
                start.setText("安装");
            }
            break;
            case DownloadTask.DOWNLOADING: {
                start.setText("暂停");
            }
            break;
            case DownloadTask.PAUSED: {
                start.setText("继续下载");
            }
            break;
        }
    }

    public <T extends View> T getView(int id) {
        return (T) findViewById(id);
    }

将字节转换为M

    public static double pers = 1048576; //1024*1024
    public static String sizeFormatString(long size) {
        String s = "";
        if(size>1024*1024)
            s=String.format("%.2f", (double)size/pers)+"M";
        else
            s=String.format("%.2f", (double)size/(1024))+"KB";
        return s;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值