Android App 版本更新提示库 - An Android APP new version update library.
## 1. 基本使用教程
### Step 1 - 依赖
AnyVersion 最新版本已推送到 Maven Central 和 JCenter 两个服务中。请查看项目根`build.gradle`文件配置信息中是否存在 **jcenter** 或者 **mavenCentral** 选项。如果没有,请添加。
allprojects { repositories { jcenter() // OR: mavenCentral() } }
然后,在 Android Studio 项目使用 AnyVersion 库的模块的 `build.gradle` 中添加如下依赖项:
dependencies { ... others ... compile 'com.github.yoojia:anyversion:1.0@aar' }
### Step 2 - Android 权限
AnyVersion 需要的权限非常少,在 App 模块的 `AndroidManifest.xml` 文件中添加以下内容:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/>
**注意:不要嵌套在 application 中,在它的外层。 **
### Step 3 - 初始化
AnyVersion 被设计成一个单例。因此,每个 App 中只允许存在一个 AnyVersion 实例。建议在自定义 Application 类的 `onCreate(...)` 方法中初始化 AnyVersion 单例。
例如:
public class AnyVersionApplication extends Application { @Override public void onCreate() { super.onCreate(); AnyVersion.init(this, new VersionParser() { @Override public Version onParse(String response) { final JSONTokener tokener = new JSONTokener(response); try { JSONObject json = (JSONObject) tokener.nextValue(); return new Version( json.getString("name"), json.getString("note"), json.getString("url"), json.getInt("code") ); } catch (JSONException e) { e.printStackTrace(); } return null; } }); } }
这样可以保证 AnyVersion 只初始化一次。如果初始化多次,AnyVersion 只使用首次初始化的 `VersionParser` 接口。其它的初始化操作将会被忽略。
#### - 设置检查新版本 API 的 URL
AnyVersion 允许改变检查新版本 API 的 URL 地址。在初始化 AnyVersion 单例后,需要设置检查新版本的 URL 地址。
AnyVersion version = AnyVersion.getInstance(); version.setURL("http://192.168.1.2:8082/android/release.json");
AnyVersion 内置了 HTTP 请求,可以获取此 URL 的响应数据,交由 `VersionParser` 接口解析。
#### - VersionParser 版本数据解析接口
由于每个项目需求不同,服务端返回的数据格式也不同。因此,需要实现 `VersionParser` 接口来将不同的服务端响应数据解析成 `Vesion` 对象。
new Parser() { @Override public Version onParse(String response) { return new Version(versionName, versionNote, downloadURL, versionCode); } }
接口的实现类,需要将 `onParse(response)` 回调方法中的的 response 字符串解析,获取其中的 `versionName`,`versionNote`, `versionCode`,`downloadURL` 解析,并创建和返回 Version 对象。
### Step 4 - 检查 APP 新版本
AnyVersion 提供了三种处理新版本的方式。 这三种方式基本满足正常的应用需求。
* 弹出窗口 - NotifyStyle.Dialog
* 回调接口 - NotifyStyle.Callback
* 应用广播 - NotifyStyle.Broadcast
通过`anyVerson.check(NotifyStyle)`接口来触发检查新版本。
AnyVersion version = AnyVersion.getInstance(); version.check(NotifyStyle);
#### - 弹出窗口 Dialog
AnyVersion 的弹出窗口提醒新版本方式,需要`android.permission.SYSTEM_ALERT_WINDOW` 权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
当远程服务器的版本(versionCode)大于当前应用的版本数时,AnyVersion 将弹出一个对话框让用户选择是否升级。
#### - 回调接口 Callback
使用 Callback 可以自定义处理新版本的方式。在 `check(NotifyStyle)` 前,需要设置 Callback 接口的实现。
AnyVersion version = AnyVersion.getInstance(); version.setCallback(new Callback() { @Override public void onVersion(Version version) { Log.d("AnyVersion","New Version: \n" + version); } });
**注意:仅当 NotifyStule.Callback 时,此 Callback 接口才会被回调。**
#### - 应用广播 Broadcast
使用 Broadcast 来处理新版本,这种方式很不寻常,不过仍然存在。
AnyVersion 限制了接收广播的 Receiver 类型必须为 `VersionReceiver` 子类,此举是为少 AnyVersion 的复杂度。
class NewVersionReceiver extends VersionReceiver{ @Override protected void onVersion(Version newVersion) { System.out.println(">> Broadcast === \n" + newVersion); } }
Android 的广播机制,建议用户在 Activity.onStart() 中注册 Receiver,在 Activity.onStop() 中移除。AnyVersion 提供了注册和反注册的方法。
@Override protected void onStart() { super.onStart(); AnyVersion.registerReceiver(this, newVersionReceiver); }
@Override protected void onStop() { super.onStop(); AnyVersion.unregisterReceiver(this, newVersionReceiver); }
### Step 5 - 自动安装 App
当 App 用户同意更新,并且应用下载完成后,AnyVersion 会检查下载文件是否为 APK 文件。如果是 APK 文件,则自动调用系统的安装程序,完全自动更新 App 任务。
## 2. TODO
1. 根据网络类型,优化弹出窗口的选项类型
2. App 资源增量更新功能
3. 通知栏提醒新版本方式
## 3. 案例
* 停车**
## 版权声明
如果你的App中使用了 AnyVersion 库,你可以通过电子邮件通知我 Yoojia.Chen@gmail.com ,如下格式:
> 主题: 使用 AnyVersion 通知
>
> 内容: 我在 (_YOUR-APP-NAME_) 中使用了 AnyVersion-{_lib-version_}。我[同意|不同意]在GitHub AnyVersion 的`案例`中显示我的应用信息。
在一些接近最新版本的composer依赖包安装中,会出现如下错误。 D:\code\php\laravel_project>composer install No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install
将app下build.gradle文件中 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:29.+' implementation 'com.android.support.cons
Android Studio踩坑 刚安装完就遇到了这么个问题,老是让我装"Android Support Repository",装了也给我报错。赣! sync: Unable to resolve dependency for ':app@debug/compileClasspath': Could not find any version that matches com.android.su
1、打开Android SDK Manager 安装 Extas目录下的"Android Support Repository" 2、如果Extras下没有Android Support Repository 则更新Tools里面的Android SDK Tools和Android SDK Platform-tools
错误信息: Could not find any version that matches com.google.android.gms:strict-version-matcher-plugin: 解决办法: 修改文件:app\platforms\android\project.properties, 将 cordova.system.library.1=com.google.gms:goo
错误提示: Unable to resolve dependency for ':app@debug/compileClasspath': Could not find any version that matches com.android.support:appcompat-v7:29.+. Unable to resolve dependency for ':app@debugA
确保已安装Composer插件。 运行命令: composer global require "fxp/composer-asset-plugin:^1.2.0" 然后要做的就是添加require-composer.json的部分 "bower-asset/fabric": "*" 并composer update在控制台中运行命令(在项目文件夹中)
问题内容: 在做一个小发布并将其标记之前,我想更新package.json以反映该程序的新版本。 有没有一种方法可以自动编辑文件? 需要帮助吗? 问题答案: 可能是正确的答案。只给一个替代我建议咕噜凸点。它由angular.js的一名成员维护。 用法: 如果仍然使用grunt,那可能是最简单的解决方案。
问题内容: 我有两个类,例如,使用Hibernate(3.6.1最终版)和JPA(2.0)将Foo和Bar映射为@OneToOne(双向),例如- 请注意-Bar和Qux没有列 如果我们更新Bar,则hibernate将不会增加Foo的版本,而Qux则不会相同。但是我们的业务逻辑需要- 如果有人在Foo中更新Bar,而其他线程正在尝试更新同一Foo的Qux,但没有更新Bar,反之亦然,则此类更新将
虽然在处理未解决的依赖项时存在许多问题,但似乎没有更新这些依赖项的通用方法。 您需要手工为每一个检查maven central,还是有一些漂亮的工具可以自动将它们更新到最新版本?
v2.0.9[2020-4-12] 修复(Fixed): 修复 MySQL 8.0 生成实体主键位置错误 e437d36 更新(Update): 连接池关闭连接, 如果连接已经断开, 异常将会被忽略 7aac80da 增强(Enhancement): v2.0.8[2020-1-18] 修复(Fixed): 修复 ws server 的 message response.finish 兼容 swo
网防G01最新版本为:Linux版本:3.0.63.10,Windows版本:3.1.18.6,PC客户端版本:3.1.18。 更新记录: 2020年03月30日 2018年11月06日 2018年05月15日 2017年10月10日 2017年07月21日 2020年3月30日,更新说明 Linux版本:3.1.20.15 Windows版本:3.1.20.15 PC客户端版本:3.1.20.1
2018-06-19:更新 Homestead 版本到 v7.8.0; 2018-06-17:更新 Homestead 等虚拟机软件到最新;
现在创建一个 git版本库:(参见“初始化”一节) mkdir sandbox cd sandbox/ git init touch test git add . git commit -m "创建git版本库" git log查看版本纪录: commit d63e709f565dcd60ab749f0eca27a947b02b8c26 Author: kardinal <2999am@g
问题内容: 我正在使用Eclipse作为IDE。当我右键单击该项目,然后单击maven update时,我的Java版本更改为1.5。这是我到目前为止所做的,我遵循了此处列出的所有步骤 http://qussay.com/2013/09/13/solving-dynamic-web-module-3-0-requires- java-1-6-or-newer-in-maven-projects/