atlas使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fwt336/article/details/78770049

bug的上线远程修复和模块化更新越来越火,也确实给开发人员和公司带来了很大的便利。而我们公司最近也准备接入阿里巴巴的atlas,下面是使用到的一些资料和总结。


一、所有模块独立动态更新

1、 app的build.gradle的语句"version = getEnvValue("versionName", "1.0.0");"中修改想要生成的app的versionName(默认为1.0.0)
    app目录下执行../gradlew clean assembleDebug 生成apk  (windows 环境的命令为 ..\gradlew.bat clean assembleDebug  以下类同)

2、 app目录下执行../gradlew publish 将跟apk同目录的ap文件发布到仓库,此时ap的版本是1.0.0,发布到本地仓库,
路径是/C:/Users/Victor/.m2/repository/),其中Victor是电脑用户名。

3、 手机上安装生成的apk,同时进到动态部署界面(侧边栏里面划开点击进入),且手机连接电脑adb(确保adb devices可见)

///////////////////////////////^^^^^^^准备工作^^^^^^^^^^////////////////////////

4、 进行一些想要的修改(不支持manifest的修改),改动完成后需要升级一下对应bundle/lib的版本号


5、 app工程目录下执行../gradlew clean assembleDebug -DapVersion=apVersion -DversionName=newVersion,
    其中apVersion为之前打的完整apk的版本,newVersion为此次动态部署要生成的新的版本号,
    例如命令 ../gradlew clean assembleDebug -DapVersion=1.0.0 -DversionName=1.0.1

6、 检查build/output/tpatch-debug 目录下文件是否生成,然后执行下面的命令(以下为mac下的命令,windows请修改文件分隔符)
    (根据你手机的当前版本推送对应版本的update-**.json,和对应的tpatch文件)
    例如,这时是第1次部署,versionName是1.0.0,所以命令行是:

adb push build/outputs/tpatch-debug/update-1.0.0.json 

                          /sdcard/Android/data/com.taobao.demo/cache/update-1.0.0.json

adb push build/outputs/tpatch-debug/[email protected] 

                      /sdcard/Android/data/com.taobao.demo/cache/[email protected]

7、 点击动态部署页面红色按钮执行动态部署,生效后app的versionName变为了1.0.1

    注意:记得执行gradlew publish命令,将新生成的1.0.1的ap发布到仓库


8、 后续继续做想要的修改,我们要变成1.0.2 (某个bundle做动态部署的时候请更新版本号(versionName),因为差量会基于版本号对比)

   gradlew clean assembleDebug -DapVersion=1.0.1 -DversionName=1.0.2 ,这时候会生成两个文件:

   [email protected]和update-1.0.1.json

   根据你目前的app版本,重复6步骤,推送对应版本的update-**.json,和对应的tpatch文件。然后执行gradlew publish,将新生成的ap发布到本地仓库注意:一旦app使用差分升级后,那么versionName就是升级后的版本号,如:起初是1.0.0,差分升级后,就是1.0.1了,当需要再次差分升级,那么就是从1.0.1升到1.0.2了!
   例如: 如果这时你app的versionName是1.0.1
你的命令行就是:
adb push build/outputs/tpatch-debug/update-1.0.1.json /sdcard/Android/data/com.taobao.demo/cache/update-1.0.1.json

adb push build/outputs/tpatch-debug/[email protected] 

               /sdcard/Android/data/com.taobao.demo/cache/[email protected]

如果这时你app的versionName是1.0.0,也就是还是基线版本
你的命令行就是:
adb push build/outputs/tpatch-debug/update-1.0.0.json /sdcard/Android/data/com.taobao.demo/cache/update-1.0.0.json

adb push build/outputs/tpatch-debug/[email protected] 

           /sdcard/Android/data/com.taobao.demo/cache/[email protected]


9、 后续继续做想要的修改,我们要变成1.0.3 (某个bundle做动态部署的时候请更新版本号,因为差量会基于版本号对比)

gradlew clean assembleDebug -DapVersion=1.0.0 -DversionName=1.0.3   

gradlew clean assembleDebug -DapVersion=1.0.1 -DversionName=1.0.3   

gradlew clean assembleDebug -DapVersion=1.0.2 -DversionName=1.0.3   

   根据你目前的app版本,重复6步骤,推送对应版本的update-**.json,和对应的tpatch文件。  

10、 如果做了多次动态部署后,需要从头开始测试,请先清除AtlasDemo根目录下的hisTpatch文件夹。

二、添加远程bundle
2.1添加远程bundle的依赖,参考 app/build.gradle下的 bundleCompile project(':remotebundle') ,
2.2声明远程bundle列表,参考 app/build.gradle下的atlas { tBuildConfig { outOfApkBundles = ['remotebundle'] }。
2.3构建完整包,在app目录下执行../gradlew clean assembleDebug publish,远程bundle 路径:app/build/outputs/remote-bundles-debug。
2.4将远程so下载到你的设备上(主动下载和被动推送都可以),这里直接在PC上执行adb push app/build/outputs/remote-bundles-debug/libcom_taobao_remotebunle.s

  /sdcard/Android/data/com.taobao.demo/cache/libcom_taobao_remotebunle.so。
2.5打开Demo侧边栏,点击“远程组件模拟”,点击“加载远程bundle”,加载成功后就会跳到remotebundle的页面。

三、注意
3.1集成框架后就只有uses-permission,小米推送需要permission就提示缺少权限声明。
 这是因为打包插件默认开启了去除自定义权限。 可通过属性开关关闭。 属性开关是atlas.manifestOptions.removeCustomPermission = false

3.2 jar包和.so问题
文档说Bundle以so包的形式放在lib/armeabi目录,这个位置是固定吗?我的app只提供armeabi-v7a一种架构,gradle 的部分配置如下:

ndk {
abiFilters "armeabi-v7a"
}

其实你把所有的armeabi-v7a下的so文件放置到armeabi目录下就行了,然后把那个ndk的配置去掉就行了,这样做并不会影响你的apk的正常工作,
又能保证atlas不冲突,至于为什么可以去搜一下Android是如何查找和加载so的

3.3如果想在build文件中配置DapVersion和DversionName的话,需要在build.gradle中写死即可
version = getEnvValue("versionName", "1.0.0");
def apVersion = getEnvValue("apVersion", "");

四、如何构建不同的包
4.1 在build.gradle里定义一些基础的变量,比如:
 //通过增加判断逻辑,打出不同类型的定制包
 def appId = "com.taobao.demo"
def minVersion = 14

4.2增加一层逻辑控制根据不同的参数来修改之前定义变量的值 , 这样如果我们打包加了 -Pbeta, 就会使用新的值了

if (project.hasProperty("beta")) {
  appId = "com.taobao.atlas.beta"
  minVersion = 21
 }

4.3或者直接在配置的地方加上判断逻辑,使用特殊的配置

 android {
     defaultConfig 
        //通过增加判断逻辑,打出不同类型的定制包
         if (project.hasProperty("beta")) {
             buildConfigField "boolean", "API_ENV", "false"
         }else{
          buildConfigField "boolean", "API_ENV", "false"
        }
     }

4.4以上build.gradle 里的配置基本完成。 后续如果要打特殊包就可以通过修改配置的构建参数来控制打具体的包了,如:    ./gradlew clean assembleDebug :  构建标准包
    ./gradlew clean assembleDebug -Pbeta : 构建特殊包

参考自: https://github.com/alibaba/atlas/tree/master/atlas-demo
https://alibaba.github.io/atlas/code_read/atlas_start/atlas_start_1.html

猜你喜欢

转载自blog.csdn.net/fwt336/article/details/78770049