手机淘宝Atlas组件化框架

作者: 方大猪 | 来源:发表于2017-03-15 16:07 被阅读3915次

    一、前言:

    几天前手淘终于把云栖大会上说的Atlas开源了,此处应欢声雷动👏。官网地址GitHub地址

    今天不说原理性的东西(后续或许会写),有兴趣可以看官方文档:官方教程,鉴于初步跑官方给出的Demo时遇到了不少坑稍微总结下,让在准备探索的小伙伴不在迷茫的踩坑。

    ⚠️注:转载请注明原文地址、谢谢!

    二、下载Demo导入到Android Studio

    Git clone 整个项目或者直接下载到本地:https://github.com/alibaba/atlas

    1、atlas-demo下有两个项目:

    FistBundle:当它是一个独立开的组件;

    app是实际的工程,用于集成组件,最终打包成我们要的apk。

    Demo结构

    2、导入项目

    Android Studio:File->New->Import Project->分别导入FirstBundle和app工程,现在AS已经是2.3版本了,gradle也已经更新到3.3版本了,根据文档说明我们暂时不去动工程的其他配置,目的是让工程跑通,在此基础上进一步探索。


    导入项目

    3、配置gradle版本导入时gradle可能会被更新到最新版本,先改回这个2.14.1版本:

    http\://services.gradle.org/distributions/gradle-2.14.1-all.zip
    
    配置gradle版本

    4、构建FirstBundle工程

    若本地未下载2.14.1版本的gradle可能要等好久,或者直接报错(Error:Cause: zip file is empty),OS系统可以到gradle文件夹:/Users/用户名/.gradle/wrapper/dists 查看有没有下好,如下因为依赖的是第三个文件夹下的gradle 然后一直下载不了,最后我是copy上面文件夹下的文件。也可以下载完放到对应目录


    gradle

    5、修改FirstBundle的builde.gradle

    否则执行不了(Issue地址),修改完用命令构建,最终生成依赖包放在本地,FirstBundle的配置就到此为止, mavenlocal位置:/Users/用户/.m2/repository/

    publishing {
        publications {
            maven(MavenPublication) {
                artifact "${project.buildDir}/outputs/awb/${project.name}-release.awb"
                artifact sourcesJar
            }
        }
        repositories {
            mavenLocal()
    //        maven {
    //            url "url"
    //            credentials {
    //                username = "xxx"
    //                password = "xxx"
    //            }
    //        }
        }
    }
    
    修改完成执行shell构建
     ./gradlew clean assembleRelease publishMavenPublicationToMavenLocal
    

    6、app工程

    修改builde.gradle 大概在37行,很奇怪阿里团队一个简单的Demo搞这么多幺蛾子。把firstbundle改成驼峰FirstBundle就好,因为FirstBundle工程生成的awb是FirstBundle。

    修改依赖

    三、构建

    1、关键在于app项目下两个sh脚本

    构建、更新

    2、修改buildApk.sh

    在文件内容最后添加:adb install -r build/outputs/apk/app-debug.apk,或者构建完成执行安装apk,因为buildApk.sh内不是执行命令,是echo "打印、打印、打印"

    Terminal执行命令sh buildApk.sh,执行成功后apk已经包含了app和FirstBundle项目

    sh buildApk.sh
    

    3、sh buildTpatch.sh

    Terminal执行:sh buildTpatch.sh,把资源推到手机上,具体看buildTpatch.sh文件的命令。再点击“动态部署”更新包内容,至此就完成了:集成组件、快速更新的简单演示。

    Demo界面

    四、总结

    微笑脸:),花了整整一天才摸清楚一个Demo,成本有点高。但愿Atlas团队在优化框架的同时也丰富下Demo,毕竟入手还是要从文档和Demo开始,倘若成千上万的小伙伴花时间在解决这些坑真是浪费生命。有疑惑请留言,谢谢!

    相关文章

      网友评论

      • longzekai:阿里的这个框架,学习成本是比较高,真正要使用上的话,也需要一定的研究。
      • 1b14b4f88383:这个方法好像一直返回false 吧
        public boolean dexMerge(String patchFilePath, List toMergeList, boolean diffBundleDex) {
        if (toMergeList.size() == 0) {
        return true;
        }
        mStartTime = System.currentTimeMillis();

        if (!dexMergeInternal(patchFilePath,toMergeList, diffBundleDex) && isBinderDied) {

        /**
        * handle binder died case
        */
        for (int i = 0; i < numBinderDieTries && isBinderDied; i++) {
        isBinderDied = false;
        if (prepare() == false) {
        return isFinished;
        }

        if (dexMergeInternal(patchFilePath,toMergeList, diffBundleDex)) {

        break;
        }
        }
        }

        return isFinished;

        }
      • 1b14b4f88383:为啥点击后提示合并失败?
        "merge failed!";
        大概是什么原因引起的?

        这个方法为什么返回false ?
        boolean mergeFinish = dexMergeClient.dexMerge(patchFile.getAbsolutePath(),toMergeList, true);
      • 244ab1d52f39:能分享一下成功后的demo吗?为什么总是编译不成功。
      • 张哲1111:我自己建gradle.build 基本不会成功 ,没有MyProject:generateDebugSources
        MyProject:processDebugJavaRes
        MyProject:compileDebugNdk UP-TO-DATE
        MyProject:compileDebugSources
        MyProject:collectDebugMultiDexComponents
        这些任务 ,我要疯了 阿里能不能出个教程啊 ,后期没人推广这个框架,终究会难用而死
      • 37e8e9729458:我打开FirstBundle报错
        Gradle 'FirstBundle' project refresh failed
        Error:Read timed out
        37e8e9729458:@上门女婿联盟 还是不行,能加个qq吗!
        上门女婿联盟:可能是下载依赖的问题 打开build.gradle第一波下载资源可以先把jcenter改成 maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'} 解决了依赖关系之后随便我们怎么搞
      • 张哲1111:我一编译遇到这个错误怎么高

        Error:Could not find dom4j:dom4j:2.0.
        Searched in the following locations:
        file:/Applications/Android Studio.app/Contents/gradle/m2repository/dom4j/dom4j/2.0/dom4j-2.0.pom
        file:/Applications/Android Studio.app/Contents/gradle/m2repository/dom4j/dom4j/2.0/dom4j-2.0.jar
        file:/Users/qianniansun/.m2/repository/dom4j/dom4j/2.0/dom4j-2.0.pom
        file:/Users/qianniansun/.m2/repository/dom4j/dom4j/2.0/dom4j-2.0.jar
        https://jcenter.bintray.com/dom4j/dom4j/2.0/dom4j-2.0.pom
        https://jcenter.bintray.com/dom4j/dom4j/2.0/dom4j-2.0.jar
        Required by:
        :app:unspecified > com.taobao.android:atlasplugin:2.2.3.rc2
        上门女婿联盟:一语点醒,谢谢大大。可以加两句:因为build.gradle里面的version是会覆盖掉AndroidMainfest里面的所以需要修改version的地方有三处,第一处:FirstBundle的build.gradle;第二处:app的build.gradle的version变量;第三处buildTpatch的DversionName,三个值要保持一致
        张哲1111:@方大猪 好的可以了 谢谢
        方大猪:Demo是旧版的吧,可以更新下,因为 com.taobao.android:atlasplugin官方已经是2.2.3.rc6了,我是用2.2.3.rc4的。你可以改下app的build.gradle,再试试。

      本文标题:手机淘宝Atlas组件化框架

      本文链接:https://www.haomeiwen.com/subject/ehnlnttx.html