精华内容
下载资源
问答
  • app热更新

    千次阅读 2017-09-28 10:27:27
    苹果移除热更新app的好处和弊端是什么?下面极速下小编就来给大家详细的说说吧。 热更新什么意思? 如果平台支持热更新的话,客户端在更新的时候不需要重打包,玩家不需要重新进入网站下载最新安装包,而直接在...

    近日,苹果再次重申全面禁止热更新,截止6月12日不移除相关代码就下架。那么热更新什么意思?苹果移除热更新app的好处和弊端是什么?下面极速下小编就来给大家详细的说说吧。

    热更新什么意思?

    如果平台支持热更新的话,客户端在更新的时候不需要重打包,玩家不需要重新进入网站下载最新安装包,而直接在大厅内部检测更新文件唯 一标识码,自动下载更新替换文件。

    从玩家的角度的角度来看,如果平台是冷更新的话,每次游戏内容有更新,玩家都需要去官网重新下载游戏包,体验非常差,如果再出现丢包等情况的话,甚至会造成大量玩家流失。而如果平台是热更新的话,游戏内容更新,则会在玩家打开APP或客户端之后,自动下载进行更新,玩家只需静静等待即可。

    APP热更新,是指软件不通过苹果APP Store软件版本更新审核,直接在应用自行下载的软件数据更新。苹果禁止热更新,主要原因是担心一些黑客可能会利用热更新修改 App,给用户带来安全隐患,这也与苹果的安全和隐私政策不符。另外,苹果此举既能改善部分使用混编语言的 App 的流畅性,也能重新掌握一些渠道的 App 审核权限。

    热更新

    苹果在今年 3 月份的时候就曾向所有开发者推送警告邮件,宣布未来将禁用 APP 内部的“动态分发”功能。并要求开发者在自家 APP 中删除 JSPatch 相关框架,否则 APP 将面临下架或禁止上架。

    6 月 1 日,苹果再次重申:要求当前含有热更新功能的 App,在 6 月 12 日前移除相关代码,否则这些 App 可能会下架。

    移除热更新app的好处和弊端

    由于软件热更新绕过了苹果的审核,黑客开发者有可能会通过提交正常的版本之后,通过热更新的方式修改 APP 导致安全隐患,这违反了苹果的安全隐私政策。另外苹果此举既能改善部分使用混编语言的 App 的流畅性,也能重新掌握一些渠道的 App 审核权限。可以料想,从 6 月 12 日开始,iOS 可能会出现一次 APP 下架的小高潮。

    其实无论是安卓还是 iOS,规则上都是不允许“热更新”的。只不过以前 iOS 并没有特别严格的限制,安卓是由于开源且其服务在国内不能使用,所以形同虚设。

    禁止热更新有利有弊。有利的是,禁止热更新,更能够保证用户的安全性。不利的是,每次都需要下载一个完整的应用,耗费流量。而对于开发者来说,有“热更新 ”能够非常迅速解决一些小 bug,禁止后只能等苹果慢慢审核.....

    展开全文
  • APP热更新

    2017-03-08 17:03:39
    WEEX:http://www.weex.help/ 其于VUE开发,类似于微信小程序 RN:http://reactnative.cn/ 其于JSPATH

    1、WEEX:http://www.weex.help/

    其于VUE开发,类似于微信小程序

    前端开发-Weex初试  http://www.cnblogs.com/TomSnail/p/6072587.html




    2、RN:http://reactnative.cn/

    其于JSPATH



    展开全文
  • App热更新发布流程.docx
  • Bugly实现APP热更新

    2018-06-26 21:36:05
    Bugly实现APP热更新 Bugly实现热修复采用的是微信Tinker技术。对Tinker进行了简化封装。 Bugly热修复官方文档 一、配置参数 添加插件依赖 工程根目录下“build.gradle”文件中添加: buildscript { ...

    Bugly实现APP热更新

    Bugly实现热修复采用的是微信Tinker技术。对Tinker进行了简化封装。

    Bugly热修复官方文档

    一、配置参数

    • 添加插件依赖

      工程根目录下“build.gradle”文件中添加:

      buildscript {
          repositories {
              jcenter()
          }
          dependencies {
              // tinkersupport插件,其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.0.3
              classpath "com.tencent.bugly:tinker-support:latest.release"
          }
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    二、集成SDK

    • gradle配置

      在app module的“build.gradle”文件中添加(示例配置):

      dependencies {
            compile "com.android.support:multidex:1.0.1" 
            compile 'com.tencent.bugly:crashreport_upgrade:latest.release'
      }
      • 1
      • 2
      • 3
      • 4

      在app module的“build.gradle”文件中添加:

      // 依赖插件脚本
      apply from: 'tinker-support.gradle'
      • 1
      • 2
    • tinker-support.gradle内容如下所示(示例配置):

      需要在同级目录下创建tinker-support.gradle这个文件

      apply plugin: 'com.tencent.bugly.tinker-support'
      
      def bakPath = file("${buildDir}/bakApk/")
      
      def appName = "app-0111-15-18-41"
      
      /**
      * 对于插件各参数的详细解析请参考
      */
      tinkerSupport {
      
          // 开启tinker-support插件,默认值true
          enable = true
      
          // 指定归档目录,默认值当前module的子目录tinker
          autoBackupApkDir = "${bakPath}"
      
          // 是否启用覆盖tinkerPatch配置功能,默认值false
          // 开启后tinkerPatch配置不生效,即无需添加tinkerPatch
          overrideTinkerPatchConfiguration = true
      
          // 编译补丁包时,必需指定基线版本的apk,默认值为空
          // 如果为空,则表示不是进行补丁包的编译
          // @{link tinkerPatch.oldApk }
          baseApk =  "${bakPath}/${appName}/app-release.apk"
      
          // 对应tinker插件applyMapping
          baseApkProguardMapping = "${bakPath}/${appName}/app-release-mapping.txt"
      
          // 对应tinker插件applyResourceMapping
          baseApkResourceMapping = "${bakPath}/${appName}/app-release-R.txt"
      
          // 唯一标识当前版本
          tinkerId = "1.0.1-base"
      
          // 是否开启代理Application,设置之后无须改造Application,默认为false
          enableProxyApplication = false
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39

    三、初始化SDK

    enableProxyApplication = false 的情况

    • 自定义Application
    public class SampleApplication extends TinkerApplication {
        public SampleApplication() {
            super(ShareConstants.TINKER_ENABLE_ALL, "com.yiba.test.buglypatch.SampleApplicationLike",
                    "com.tencent.tinker.loader.TinkerLoader", false);
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 自定义ApplicationLike
    public class SampleApplicationLike extends DefaultApplicationLike {
    
        public static final String TAG = "Tinker.SampleApplicationLike";
    
        public SampleApplicationLike(Application application, int tinkerFlags,
                boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime,
                long applicationStartMillisTime, Intent tinkerResultIntent, Resources[] resources,
                ClassLoader[] classLoader, AssetManager[] assetManager) {
            super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime,
                    applicationStartMillisTime, tinkerResultIntent, resources, classLoader,
                    assetManager);
        }
    
    
        @Override
        public void onCreate() {
            super.onCreate();
            // 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
            Bugly.init(getApplication(), "900029763", true);
        }
    
    
        @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
        @Override
        public void onBaseContextAttached(Context base) {
            super.onBaseContextAttached(base);
            // you must install multiDex whatever tinker is installed!
            MultiDex.install(base);
    
            // 安装tinker
            // TinkerManager.installTinker(this); 替换成下面Bugly提供的方法
            Beta.installTinker(this);
        }
    
        @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
        public void registerActivityLifecycleCallback(Application.ActivityLifecycleCallbacks callbacks) {
            getApplication().registerActivityLifecycleCallbacks(callbacks);
        }
    
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    四、AndroidManifest.xml配置

    • 权限配置
    <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.READ_EXTERNAL_STORAGE"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • Activity配置
    <activity
        android:name="com.tencent.bugly.beta.ui.BetaActivity"
        android:theme="@android:style/Theme.Translucent" />
    • 1
    • 2
    • 3
    • 配置FileProvider(Android N之后配置)

      文档

    五、混淆配置

    为了避免混淆SDK,在Proguard混淆文件中增加以下配置:

    -dontwarn com.tencent.bugly.**
    -keep public class com.tencent.bugly.**{*;}
    • 1
    • 2

    如果你使用了support-v4包,你还需要配置以下混淆规则:

    -keep class android.support.**{*;}
    • 1

    六、编译基准包

    基准包就是原先运行有bug的包。

    点击Android Studio右上角的Gradle按钮,找到项目的assembleRelease任务,双击执行assembleRelease任务。

    image

    任务执行完成后,会在build的目录下生成如下文件:

    image

    七、修复基准版代码

    修复前代码:

    public class BugClass {
    
        public String bug() {
            String str = "This is a bug";
            str = null;
            Log.e("zhang", "BugClass --> bug--> str length :" + str.length());
            return str;
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    修复后代码:

    public class BugClass {
    
        public String bug() {
            String str = "This is a bug";
    //        str = null;
            Log.e("zhang", "BugClass --> bug--> str length :" + str.length());
            return str + "  , fixed!!!";
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    调用代码:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button btn = (Button) findViewById(R.id.btn);
    
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    BugClass bugClass = new BugClass();
                    String bug = bugClass.bug();
                    Toast.makeText(MainActivity.this, bug, Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    八、生成补丁包

    • 修改appName名称以及文件名称都需要保持一致。同时将基准包的tinkerid=1.0.1-base改为补丁包的tinkerid=1.0.1-patch。

    image

    • 生成补丁包

    执行生成补丁包的任务操作:

    image

    任务执行完之后,会生成3个文件,其中patch_signed_7zip.apk是我们需要的补丁包

    image

    将补丁包上传至bugly的应用升级模块的热更新中

    具体见bugly的官方文档


    上传了补丁包可能不会立马生效,多试几次就好

    Demo

    转自:https://blog.csdn.net/qq_33689414/article/details/54911918

    展开全文
  • H5+App与Uni-App热更新问题综述 plus.runtime.install在安卓9.0以上无法执行解决方案 云打包时配置manifest.json将targetSdkVersion改为26或更高 最高建议28。 H5+App [外链图片转存失败,源站可能有防盗链机制...

    H5+App与Uni-App热更新问题综述

    • plus.runtime.install在安卓9.0以上无法执行解决方案

    • 云打包时配置manifest.json将targetSdkVersion改为26或更高 最高建议28。

    H5+App

    在这里插入图片描述

    Uni-App

    在这里插入图片描述

    • 如果提交云端打包后调用plus.runtime.install无法安装apk文件,请添加以下权限
    <uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>  
    <uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>
    

    在这里插入图片描述

    • android平台对版本判断方法有bug,需添加强制升级参数force为true
      默认是会进行版本校验的,即相同版本或低版本的wgt不能覆盖安装高版本的应用;
      如果要忽略版本强制安装则可添加参数force为true,如下:
    plus.runtime.install("_doc/update.wgt",{force:true},function(){  
        console.log("success");  
        plus.runtime.restart();  
    },function(e){  
        console.log("failed: "+e.message);  
    });
    

    以上问题都是结合官方文档,实测后做的总结。如有新的问题欢迎各位大佬评论区留言

    如果觉得文章还可以,就点个赞支持一下作者吧

    展开全文
  • h5 app 热更新

    2020-08-10 14:31:40
    之前刚来公司修改碰到的问题,app版本更替需要热更新。查阅了一些资料。 首先这里的Hbuilder打包的那种。 // 下载wgt文件 const downWgt = () => { var wgtUrl = "http://xx.xx.xxx.xx/zy/H5CA0AC70.wgt"; ...
  • iOS-OC-APP热更新,动态更新(仿QQ打开或关闭某个功能) http://blog.csdn.net/u014220518/article/details/52248803
  • APP热更新方案

    2020-02-19 13:37:40
    为什么要做热更新 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就会忙得焦头烂额:重新打包App、测试、向各个应用市场和渠道换包、提示用户升级、用户下载、覆盖安装。 重点是还会...
  • APP热更新资料

    2019-10-16 19:32:15
    https://www.jianshu.com/p/08748b128ce3Android热更新技术总结 https://blog.csdn.net/hb707934728/article/details/52152739android热更新机制 https://www.jianshu.com/p/3901c074220b 自己动手做android热更新...
  • uni-app的app热更新过程

    千次阅读 2020-07-16 15:28:24
    1.uni-app项目基础设置中应用版本名称和应用版本号一致,如果在app.vue中注释了app版本更新的方法在打包之前应该放开 checkAppVersion() { // #ifdef APP-PLUS var os_type = plus.os.name.toLowerCase(); var ...
  • \\上半年苹果的两次警告,通知iOS开发者在6月12日前移除热更新相关代码,否则将会下架相关App,一时间风声鹤唳,那么App热更新技术到底还能用吗?Android热更新技术还有必要做吗?\\对于这一问题,InfoQ记者咨询了乐...
  • 在uniapp中热更新与强制更新 // app升级 uni.request({ //检查更新的后台接口,此处为简单判断版本号是否需要更新 url: 'xxxxxxxxxx', data: { //app类型,安卓为1,苹果为2 appType: '1' ...
  • uni-app热更新

    2020-06-13 14:44:32
    1.2、首先,更新 manifest.json 中的版本号。 比如之前是 1.0.0,那么新版本应该是 1.0.1 或 1.1.0 这样。 2、发行 2.1、然后,在 HBuilderX 中生成升级包(wgt)。 2.2、菜单->发行->原生App-制作移动App...
  • Ionic APP 热更新

    2017-10-30 16:36:00
    作用:cordova热更新插件,提供了在应用程序中对基于Web的内容进行自动更新的功能。 GitHub地址:https://github.com/nordnet/cordova-hot-code-push 另外一并介绍:cordova-hot-code-push-cli 作用:cordova-...
  • SecurePath是一款为苹果IOS移动APP提供热更新和安全加固的产品。该产品包含有三部分的功能:ObjC原生代码热更新SDK(SP-SDK)、热更新代码下发平台(SPD-Platform)、原生代码加固混淆工具(SP-Tool)。下面我们分别为大家...
  • APP 热更新,有H5的,有Navtion的,可有类似discuz的??????????? 向伟大的编程帝国求救
  • 关于APP热更新,如何在Liunx服务器上搭建Code Push Server 公司的RN开发要搞热更新,所以要在服务器上搭建Code Push Server,自己以前也没搭过,所以也在网上查了很多资料,中间遇到很多问题,所以记录一下,防止...
  • uni-app热更新例子

    2020-08-31 18:52:41
    //热更新 update() { var _self = this; plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { _self.$ajax.get({ url: 'api/app/getVersion', data: { version: widgetInfo.version...
  • Cordova+Vue app热更新

    2020-07-09 18:07:26
    chcp.json: 包含发布相关信息:热更新代码版本号,应用 native side 版本号等等 chcp.manifest: 包含项目热更新代码(静态)文件信息:文件名和文件哈希值 2个文件会被创建到 cordova根目录 下的 www文件夹中
  • App热更新原理

    千次阅读 2017-12-09 16:24:37
    要实现热更新,就需要我们在运行时去更改PathClassLoader.pathList.dexElements,由于这些属性都是private的,因此需要通过反射来修改。另外,构造我们自己的dex文件 所对应的dexElements数组的时候,我们也可以...
  • cordova hybirdapp 热更新

    千次阅读 2016-12-01 14:48:49
    app的审核耗时困扰人们许久,尤其是ios的app。当app刚上线又出现一些小bug需要...cordova的cordova-hot-code-push插件让这些原本很复杂很麻烦的工作变得简单,codepush插件可以直接实现不上传appstore 更新我们的应用。
  • cordova打包app热更新问题

    千次阅读 2019-07-05 16:13:33
    App 在终端上安装后,不需要重新下载app,实现内壳更新。 原理:1.在项目根目录的config.xml文件中添加指向服务器的地址 2.在www目录中添加chcp.json配置文件,配置指向服务器,更新时间,更新方式 步骤:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,799
精华内容 719
关键字:

app热更新