您现在的位置是:数据库 >>正文
实现安卓app自动更新功能实例方案
数据库381人已围观
简介一般的安卓应用都会提供自动更新的功能,让用户方便使用最新的版本,现在我们来讲讲如何实现安卓应用自动更新的功能实例方案,方便大家学习。 安卓应用实现自动更新比较简单,这里跟大家介绍下。1. ...
安卓应用实现自动更新比较简单,例方这里跟大家介绍下。源码下载实现
1. web接口
需要提供一个接口供客户端查询更新状态,安卓案并且在需要更新时,动更告知客户端新APK地址。新功
接口参数如下 :
package 包名 ,例方因为有时候会出现同一个应用换包名打包的实现情况
version 版本号,即android清单文件里面的安卓案versionCode
channel 渠道号
os 操作系统,android/ios 。建站模板动更ios 这里仅作预留。新功
之所以传入这些字段,例方是要在与服务器端的包匹配时 ,务必满足:
package, channel, os 相等,并且服务器端的version 大于 客户端传入的version
代码如下:
os = request.GET.get(os)
pkg_name = request.GET.get(package)
channel = request.GET.get(channel)
version = request.GET.get(version)
if not os or not pkg_name or not channel or not version:
return jsonify(**ret_dict)
pkg = Package.objects.filter(
os=os,
package=pkg_name,
channel=channel,
status__gt=config.PACKAGE_STATUS_NOT_UPDATE
).order_by(-version).first
if pkg and int(version) pkg.version:
ret_dict[pkg_status] = str(pkg.status)
ret_dict[pkg_url] = config.WEB_HOST + pkg.file.url
ret_dict[update_prompt] = pkg.info
return jsonify(**ret_dict)
2. 数据库设计
由于web端使用的香港云服务器是django,所以可以很方便的给出运营同学可以操作的后台界面 ,如下:

注意红框内的元素,运营同学在上传时 ,是源码库不允许修改的,而是由程序自动解析APK文件得到后填入的。
具体的解析方法 ,我们稍后给出。
而对应的亿华云models代码如下 :
class Package(models.Model):
file = models.FileField(u文件, upload_to=config.PACKAGE_UPLOAD_PATH)
package = models.CharField(u包名, max_length=255, blank=True, default=)
version = models.IntegerField(u"版本号", blank=True, default=0, null=True)
channel = models.CharField(u"渠道", max_length=128, blank=True, default=)
status = models.IntegerField(u更新状态, default=config.PACKAGE_STATUS_NOT_UPDATE,
choices=config.PACKAGE_UPDATE_STATUS)
info = models.TextField(u通知信息, blank=True, null=True)
os = models.CharField(u操作系统, max_length=64, default=config.PACKAGE_CLIENT_UNKNOW,
choices=config.PACKAGE_CLIENT_OS, blank=True, null=True)
def __unicode__(self):
_,name = os.path.split(self.file.name)
return name
class Meta:
unique_together = (package, version, channel, os)
def save(self, * args, ** kwargs):
# 文件上传成功后 ,文件名会加上PACKAGE_UPLOAD_PATH路径
path,_ = os.path.split(self.file.name)
if not path:
if self.file.name.endswith(.apk):
self.os = config.PACKAGE_CLIENT_ANDROID
path = os.path.join(/tmp, uuid.uuid4.hex + self.file.name)
# logger.error(path: %s, path)
with open(path, wb+) as destination:
for chunk in self.file.chunks:
destination.write(chunk)
info = parse_apk_info(path)
os.remove(path)
self.package = info.get(package, )
self.version = info.get(version, 0)
self.channel = info.get(channel, )
elif self.file.name.endswith(ipa):
self.os = config.PACKAGE_CLIENT_IOS
super(self.__class__, self).save(*args, ** kwargs)
def display_filename(self):
_,name = os.path.split(self.file.name)
return name
display_filename.short_description = u"文件"
3. APK文件解析
def parse_apk_info(apk_path, tmp_dir=/tmp):
"""
获取包名 、版本、渠道:
{ version: 17, channel: CN_MAIN, package: ‘com.fff.xxx}
:param apk_path:
:return:
"""
from bs4 import BeautifulSoup
import os
import shutil
import uuid
abs_apk_path = os.path.abspath(apk_path)
dst_dir = os.path.join(tmp_dir, uuid.uuid4.hex)
jar_path = os.path.abspath(os.path.join(os.path.dirname(__file__), apktool.jar))
cmd = java -jar %s d %s %s % (jar_path, abs_apk_path, dst_dir)
if isinstance(cmd, unicode):
cmd = cmd.encode(utf8)
# 执行
os.system(cmd)
manifest_path = os.path.join(dst_dir, AndroidManifest.xml)
result = dict
with open(manifest_path, r) as f:
soup = BeautifulSoup(f.read)
result.update(
version=soup.manifest.attrs.get(android:versioncode),
package=soup.manifest.attrs.get(package),
)
channel_soup = soup.find(meta-data, attrs={ android:name: UMENG_CHANNEL})
if channel_soup:
result[channel] = channel_soup.attrs[android:value]
shutil.rmtree(dst_dir)
return result
当然 ,正如大家所看到的 ,我们需要依赖于 apktool.jar 这个文件 ,具体大家可以在网上下载。
服务器租用Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“信息技术视野”。http://www.bziz.cn/html/766b8899145.html
相关文章
简析云数据安全平台的关键能力和应用评估
数据库云计算的应用催生了一系列新的安全挑战。云服务的弹性使企业能够毫不费力地启动新的数据服务,从而导致无序蔓延的环境,其中数据可以在对象存储、托管服务和非托管数据库之间不断流动。由于许多基础设施是由云服务提 ...
【数据库】
阅读更多Excel选取多个不连续单元格的方法
数据库excel是很多小伙伴都在使用的一款表格文档编辑程序,在这款程序中,我们可以对表格中的数据进行排序、筛选或是计算等各种操作,还可以对表格中的单元格进行框线的设置,功能十分的丰富。有的小伙伴在使用Exc ...
【数据库】
阅读更多华硕双系统安装教程(华硕双系统安装教程,让你的电脑拥有更多选择)
数据库作为一台功能强大的计算机品牌,华硕电脑受到了很多用户的喜爱。对于一些需要同时使用不同操作系统的用户来说,安装双系统成为了一个必不可少的需求。本篇文章将为大家提供一份详细的华硕双系统安装教程,让你轻松实 ...
【数据库】
阅读更多
热门文章
最新文章
友情链接
- 健身餐市场(健身人群的增加,为健身餐市场带来爆发式增长)
- 探索takara的品牌魅力(揭示takara在创新科技和可持续发展方面的领先地位)
- 腾龙10-24(全新升级的画质与音效,让你沉浸在电影的魅力之中)
- 努比亚与华为拍照效果对比分析(谁是拍照界的佼佼者?)
- 8系主板质量如何?(探索8系主板质量,选择最佳性能)
- 三星G22W评测(揭秘三星G22W的卓越性能与强大功能,发现专业显示器的魅力)
- 苹果手机mac地址如何修改(探索改变苹果手机mac地址的方法及步骤)
- 无锡爱回收——打造环保生活新方式(以实用、高效、便捷的方式解决废品回收难题)
- Gx850显卡性能评测(探究Gx850显卡的性能特点与应用领域)
- 江苏迪纳(江苏迪纳) 亿华云企业服务器源码库网站建设b2b信息平台云服务器香港物理机