【App】Easyinstall for Android

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: EasyInstall工具极大的方便了QA、RD、PM、FE等不同角色同学安装NA版本包做试用及内测,有效的提升了NA迭代交付过程的环节效率。

一、EasyInstall 需求收集:

需求背景 需求内容 优先级 备注 当前进度

增加可以下载历史包的功能,不仅局限于下载最新包,还可以提供最新包之前2个历史包的下载功能。 P0
已完成100%
提bug时时需要图片,手机截屏再传到电脑步骤繁琐、费时。

增加在APP上提bug的功能,直接将图片从手机传到bug提交页。


P1 通过在手机上调用外部浏览器访问提bug页面,可以实现在APP上直接提交bug 已完成100%

下载页下载时,删除按钮设置为不可点击,防止下载过程中删除安装包导致下载失败 P0

已完成100%

为了观看方便 将时间以及构建号从下载页外露,放置到首页,替换“jenkins最新包” P0
已完成100%

添加首页刷新的功能,底部添加一个刷新按钮 P0
已完成100%

增加标注打包人,打包时间。 P0 Jenkins中不记录打包人,因为现在不需要登录就可以打包;只能记录最终提交代码的RD。 已完成100%

支持日志导出分析。 P1

调起文件管理器显示日志列表,选择导出哪些日志文件,选好后弹出发送界面可选择百度hi发送到电脑。

已完成100%


二、EasyInstall 排期计划:

阶段 大体内容 产出 预估天数 预估日期
需求收集
  1. 从使用EasyInstall的PM、QA、RD调研新的需求。
  2. 分析EasyInstall中不合理的、可优化的、可拓展的需求。
  3. 网上收集其他公司同种类型的工具,了解基本功能,对比研究可拓展需求。
产出需求收集列表,划分优先级 3天 4.5-4.7
需求可行性
  1. 分析需求实现之后带来的效益,包括效率上、体验上等。
  2. 分析需求的隐患,未来的变动可否导致一些潜在问题。
  3. 分析需求的优先级、技术可行性,包括技术内容、难度等,将产出大,效益小的需求砍掉。

将可行的需求列出,包含效益、风险

、所要用到的技术等

5天 4.10-4.14
需求实现
  1. 根据需求去学习一些新的技术内容。
  2. 编写代码,初步实现需求的基本功能,统计过程中遇到的问题,将问题消化解决。
  3. 需求代码做一些优化与健壮性维护,健全需求的功能。

产出需求新功能,能在APP上debug

展示

根据需求量、技术内容

、技术难度以及4.7版本

测试业务量所决定

4.10-4.28
组内小规模测试
  1. 实现需求功能之后在组内进行简单的新功能测试,并验证以前的功能是否收到影响。
  2. 使用过程中统计bug及不合理的地方。
  3. 分析bug,定位bug,修复bug,回归测试bug。
产出bug列表及解决方式 5天 5.2-5.12
推广
  1. 将新版APP推广给大家使用,将使用过程中遇到的问题记录。
  2. 维护新版APP,不断优化、解决问题。
产出下载链接或者二维码 2天 5.16-5.20


三、EasyInstall参考文档:

3.1、部分变量命名:

变量 备注
String buildNum
包的构建号
String buildtime
包的构建时间
String getBuildAndTimeUrl
获得Android构建号和构建号的url
Map<String, Integer> app_launcher

k-v结构,key是APP类型,value是图片的资源号;

能将APP和对应的图片对应起来

Map<String, String> app_selected_erweima

k-v结构,可以是APP类型,value是二维码对应的地址;

能将APP和对应的二维码对应起来,下载页面点击分享的时候会用到。

ArrayList<String> old_version_selected_m
第二个spinner要填充的内容,即每个APP对应有哪些版本,通过网络访问获得。
public TextView spinner_view_version
“版本为:”
public TextView spinner_view;
“APP类型为:”
public TextView sign_pagetype;
显示构建时间和构建号
public Spinner spinner
第一个spinner
public Spinner spinner_version
第二个spinner
ImageButton qr_button;
扫描二维码的按钮,调用Google扫描二维码的api
ImageButton imageButton_release
对应的APP版本的icon展示,没有设置点击响应方法,只有图片显示效果
FloatingActionButton fab

悬浮效果按钮,即最下方的几个按钮

View hengxian1
首页的分割横线
RelativeLayout relativeLayout1
首页相对布局,每个相对布局包括一个imageButton,3个textView,一个安装button

3.2、部分方法解释:

方法 备注
public Boolean getHttp_pakegeNumandTime(String url,int flag)

该方法返回将全局变量buildTime和buildNum赋值,返回值是该包是否构建成功,flag标志表示给不同的buildtime赋值。

class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
                               long arg3) {
该方法是第一个spinner的点击响应方法,主要做一些界面布局的处理、根据所选内容填充第二个spinner的内容、获取Android和ios及其历史包的构建号和构建时间等。
handler = new Handler() {
     public void handleMessage(Message msg) {
handler接收消息队列中的消息,接收不同的消息号表示不同的子线程任务已经完成,方法中主要做一些网络访问结束后的逻辑处理。
protected void onActivityResult(int requestCode, int resultCode, Intent data)

执行startActivityForResult()方法从另一个activity中跳转过来之后会执行这个方法,requestCode == 666的时候表示已经选择好要导出日志文件,用getData()方法获取该日志的url后,调起Android系统的分享,可以将日志文件导出到百度hi或者微信等。

refresh.setOnClickListener(new View.OnClickListener() {
   
 public void onClick(View view) {

refresh按钮的点击响应方法,主要通过创建子线程进行网络访问获取Android和ios及历史包的构建号和构建时间,然后更新首页显示的构建号和构建时间。

data.setOnClickListener(new View.OnClickListener() {
    
 public void onClick(View view) {
data按钮的点击响应方法,主要是调起系统的文件管理器访问指定目录,选择要导出的日志文件。
fab.setOnClickListener(new View.OnClickListener() {
    
 public void onClick(View view) {
首页右下角推广按钮的点击响应方法,点击后进入另一个extends activity页面。
public String convert(long mill){
将时间戳转换成对应格式的时间,返回String格式


3.3、url解释:

Android端最新包下载地址:

http://10.19.128.100:8080/jenkins/job/WMapp/lastSuccessfulBuild/artifact/app/build/outputs/apk/waimai.apk

最新包是指最新成功构建的包。下载历史包的话要将上面url中lastSuccessfulBuild替换成对应历史包的构建号即可。

获取最新包构建号的地址:

http://10.19.128.100:8080/jenkins/job/WMapp/lastSuccessfulBuild/api/json

将数据流转换成json格式以后可以从中提取出构建号和构建时间。

历史包的构建号获取方式是通过最新包的构建号来往前遍历,直到找到上一次成功构建的历史包。

如最新包的构建号是380,将url中lastSuccessfulBuild替换成379、378等直到碰见第一个构建成功的包。

判断是否构建成功的标志是json中的result字段,FAILURE表示失败,SUCCESS表示成功。


3.4、分享页面二维码的地址:

Android-release:

http://10.19.128.100:8080/jenkins/job/WMapp/lastSuccessfulBuild/artifact/app/build/outputs/apk/image.png

Android-debug:

http://10.19.128.100:8080/jenkins/job/WMapp/lastSuccessfulBuild/artifact/app/build/outputs/apk/debug-image.png

上面url都是最新版的地址,历史包的地址只要将url中lastSuccessfulBuild替换成对应的构建号即可。

ios扫码地址:

http://10.19.128.100:8080/jenkins/job/WMapp_iOS/lastSuccessfulBuild/artifact/scm-output/image.png

历史包的地址同理。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
446 0
|
2月前
|
XML 自然语言处理 Android开发
🌐Android国际化与本地化全攻略!让你的App走遍全球无障碍!🌍
【7月更文挑战第28天】在全球化背景下,实现Android应用的国际化与本地化至关重要 for 用户基础扩展。本文通过旅游指南App案例,介绍全攻略。步骤包括资源文件拆分与命名、适配布局与方向、处理日期时间及货币格式、考虑文化习俗及进行详尽测试。采用Android Studio支持,创建如`res/values-en/strings.xml`等多语言资源文件夹,使用灵活布局解决文本长度差异问题,并通过用户反馈迭代优化。最终,打造一款能无缝融入全球各地文化的App。
121 3
|
2月前
|
消息中间件 Android开发 开发者
🔍深度剖析Android内存泄漏,让你的App远离崩溃边缘,稳如老狗!🐶
【7月更文挑战第28天】在 Android 开发中,内存管理至关重要。内存泄漏可悄无声息地累积,最终导致应用崩溃或性能下滑。它通常由不正确地持有 Activity 或 Fragment 的引用引起。常见原因包括静态变量持有组件引用、非静态内部类误用、Handler 使用不当、资源未关闭及集合对象未清理。使用 Android Studio Profiler 和 LeakCanary 可检测泄漏,修复方法涉及使用弱引用、改用静态内部类、妥善管理 Handler 和及时释放资源。良好的内存管理是保证应用稳定性的基石。
55 4
|
2月前
|
XML 缓存 Android开发
🎯解锁Android性能优化秘籍!让你的App流畅如飞,用户爱不释手!🚀
【7月更文挑战第28天】在移动应用竞争中,性能是关键。掌握Android性能优化技巧对开发者至关重要。
30 2
|
3月前
|
ARouter IDE 开发工具
Android面试题之App的启动流程和启动速度优化
App启动流程概括: 当用户点击App图标,Launcher通过Binder IPC请求system_server启动Activity。system_server指示Zygote fork新进程,接着App进程向system_server申请启动Activity。经过Binder通信,Activity创建并回调生命周期方法。启动状态分为冷启动、温启动和热启动,其中冷启动耗时最长。优化技巧包括异步初始化、避免主线程I/O、类加载优化和简化布局。
57 3
Android面试题之App的启动流程和启动速度优化
|
2月前
|
Android开发
Android面试题经典之如何全局替换App的字体
在Android应用中替换字体有全局和局部方法。全局替换涉及在`Application`的`onCreate`中设置自定义字体,并创建新主题。局部替换则可在布局中通过`ResourcesCompat.getFont()`加载字体文件并应用于`TextView`。
65 2
|
3月前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
64 9
|
3月前
|
XML 监控 安全
Android App性能优化之卡顿监控和卡顿优化
本文探讨了Android应用的卡顿优化,重点在于布局优化。建议包括将耗时操作移到后台、使用ViewPager2实现懒加载、减少布局嵌套并利用merge标签、使用ViewStub减少资源消耗,以及通过Layout Inspector和GPU过度绘制检测来优化。推荐使用AsyncLayoutInflater异步加载布局,但需注意线程安全和不支持特性。卡顿监控方面,提到了通过Looper、ChoreographerHelper、adb命令及第三方工具如systrace和BlockCanary。总结了Choreographer基于掉帧计算和BlockCanary基于Looper监控的原理。
56 3
|
3月前
|
安全 Android开发 数据安全/隐私保护
同样的 APP 为何在 Android 8 以后网络感觉变卡?
【6月更文挑战第8天】Android 8 及以后系统中,APP 网络感觉变卡源于更严格的安全机制和后台限制,系统对网络优化的侧重改变,以及APP自身兼容性问题。开发者需优化APP,适应新系统,用户可更新APP或检查权限设置。通过共同努力,有望改善网络卡顿现象,提升用户体验。
75 3
|
3月前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
38 0