zoukankan      html  css  js  c++  java
  • APK更新集成实践

    任务目标:将内网APK打包后最新下载链接、更新时间、更改日志显示在一个我自己制作的APP里

    任务作用我们在内网测试时更新下载APK更加便捷,并且能够清楚目标APK的版本情况,回归、验证做到有的放矢

    实现原理

    APK下载部分

    使用Jenkins打包APK后执行shell将最新打包的APK复制到Nginx配置的根目录

    cp -f $APK_BUILD_HOME/passenger-smzcself-release.apk /usr/local/nginx/html

    Nginx配置:

    /usr/local/nginx/conf/nginx.conf 添加一个9000端口的server

    这样在网页上请求"http://192.168.3.151:9000/passenger-smzcself-release.apk"就可以下载都更新后的最新APK

    APK更新时间部分

    echo 更新时间 > /usr/local/nginx/html/passenger.html
    echo $CURRENT_TIME >> /usr/local/nginx/html/passenger.html

    shell将 APK打包时间写入到passenger.html文件,网页请求http://192.168.3.151:9000/passenger.html显示打包更新时间

    APK更新日志部分

    Jenkins每次打包成功后都会根据git或者svn提交注释生成修改日志

    这个变更日志保存在Jenkins工作文件夹jobs下builds/lastSuccessfulBuild/changelog.xml里面,这个文件的XML格式,我需要将它简单切割后内容发送到/usr/local/nginx/html/passenger_log.html,最终访问http://192.168.3.151:9000/passenger_log.html这个页面就可以显示我们的APK上一次打包更新到了什么内容

    切割脚本如下:

     1 #!/bin/sh
     2 function funAWK()
     3 {
     4     out=`awk '/./ {print}' $1`
     5     out1=`echo $out | awk '
     6         {
     7         alen=split($0,a,"committer");
     8         for(k=2;k<=alen;k++)
     9             {
    10                 print a[k];            
    11             }
    12         }'`
    13     echo "$out1" > 001.log
    14     out2=`cat 001.log | while read line 
    15     do 
    16     echo ${line%%100*} 
    17     done`
    18     echo "$out2" > 001.log
    19     out3=`cat 001.log | while read line 
    20     do 
    21     echo ${line%%This reverts*} 
    22     done`
    23     echo "$out3" > 001.log
    24     out4=`cat 001.log | while read line 
    25     do 
    26     echo ${line%%Change-Id*} 
    27     done`
    28     echo "$out4" > 001.log
    29     sed -i "s/+0800/提交/g" 001.log
    30     cat 001.log > $2
    31 }
    32 funAWK /var/lib/jenkins/jobs/Android_Passenger_Release/builds/lastSuccessfulBuild/changelog.xml /usr/local/nginx/html/passenger_log.html
    33 funAWK /var/lib/jenkins/jobs/Android_Taxi_Driver_Release/builds/lastSuccessfulBuild/changelog.xml /usr/local/nginx/html/taxi_log.html
    34 funAWK /var/lib/jenkins/jobs/Android_Driver_Release/builds/lastSuccessfulBuild/changelog.xml /usr/local/nginx/html/driver_log.html 

    最终集成

    我将这几个网页集成在同一个网页上一个网页显示下载链接另外两个网页作为整个网页的iframe显示,创建一个APP工程,这个工程非常的简单只有一个webview控件,这个控件显示了我制作了的那个网页,更新APK信息后在APP端只用下拉刷新网页就会显示最新的更新信息

    最终效果

     

    安卓布局代码:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.example.smzc_apk_update">
     4     <uses-permission android:name="android.permission.INTERNET"></uses-permission>
     5     <application
     6         android:allowBackup="true"
     7         android:icon="@mipmap/smzc"
     8         android:label="神马APK升级"
     9         android:roundIcon="@mipmap/smzc"
    10         android:supportsRtl="true"
    11         android:usesCleartextTraffic="true"
    12         android:theme="@style/AppTheme">
    13         <activity android:name=".MainActivity">
    14             <intent-filter>
    15                 <action android:name="android.intent.action.MAIN" />
    16 
    17                 <category android:name="android.intent.category.LAUNCHER" />
    18             </intent-filter>
    19         </activity>
    20 
    21     </application>
    22 </manifest>

    操作代码:

     1 package com.example.smzc_apk_update;
     2 
     3 import android.os.Handler;
     4 import android.support.v4.widget.SwipeRefreshLayout;
     5 import android.support.v7.app.AppCompatActivity;
     6 import android.os.Bundle;
     7 import android.webkit.WebView;
     8 
     9 public class MainActivity extends AppCompatActivity {
    10     private WebView webview;    SwipeRefreshLayout swipeRefreshLayout;
    11     @Override
    12     protected void onCreate(Bundle savedInstanceState) {
    13         super.onCreate( savedInstanceState );
    14         setContentView( R.layout.activity_main );
    15         webview = (WebView) findViewById( R.id.webView );
    16         webview.loadUrl( "http://192.168.3.151:9000/" );
    17         swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
    18         //重写这个布局的下拉功能
    19         swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    20             @Override
    21             public void onRefresh() {
    22                 webview.clearCache( true);
    23                 //webview.reload();
    24                 webview.loadUrl( "http://192.168.3.151:9000/" );
    25                 new Handler().postDelayed(new Runnable() {
    26                                               @Override
    27                                               public void run() {
    28                                                   swipeRefreshLayout.setRefreshing(false);
    29                                               }
    30                                           },
    31                         2000);
    32             }
    33         });
    34     }
    35 }

    结语

    又到了大家喜闻乐见的血泪总结时间,本次任务耗时4天,其中对更改日志的切割耗时1天半,总结的坑点如下:

    1.在shell脚本中 echo $a 和echo “$a” 是不一样的,不加引号时输出会自动合并到一行里,我反反复复在这个问题里面饶了1天才明白过来

    2.在安卓里

    23                 //webview.reload();
    24                 webview.loadUrl( "http://192.168.3.151:9000/" );是不一样的,
    webview.reload()不会刷新 网页的iframe
    
    

     

  • 相关阅读:
    第09组 Beta版本演示
    第09组 Beta冲刺(5/5)
    第09组 Beta冲刺(4/5)
    网络对抗技术 2017-2018-2 20155215 Exp9 Web安全基础
    网络对抗技术 2017-2018-2 20152515 Exp 8 Web基础
    网络对抗技术 2017-2018-2 20152515 Exp7 信息搜集与漏洞扫描
    网络对抗技术 2017-2018-2 20152515 Exp6 信息搜集与漏洞扫描
    网络对抗技术 2017-2018-2 20152515 Exp5 MSF基础应用
    网络对抗技术 2017-2018-2 20152515 Exp4 恶意代码分析
    网络对抗技术 2017-2018-2 20152515 Exp3 免杀原理与实践
  • 原文地址:https://www.cnblogs.com/laowang-tester/p/11039596.html
Copyright © 2011-2022 走看看