溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進行Atlas框架入門

發(fā)布時間:2021-12-09 10:20:51 來源:億速云 閱讀:249 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)如何進行Atlas框架入門,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們在學習一門新語言或者新框架之前總喜歡干一件事情?!瓾ello World’。一般情況下我們都希望輸出一個簡單的demo以證明我們通過了某項內(nèi)容的基本環(huán)境搭建。沒錯,程序員是一種可以創(chuàng)超世界的生物,正如我們所寫的hello world一般,因為 we are our god!!

Android環(huán)境配置:

  1. Android Studio 2.3.1

  2. gradle 3.3

  3. gradle plugin atlas插件自適用

  4. jdk1.8

 compileSdkVersion 25
 buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.atlas.analysis"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
   


其余配置詳情請查看demo

前兩天適用 Android studio 3.0.1做atlas的demo可整蒙逼了,后續(xù)我們改造gradle再說遇到的種種坑。mabye到時間atlas官方已經(jīng)適配。不太理解atlas結(jié)構(gòu)和打包流程的可以參考官網(wǎng):

https://alibaba.github.io/atlas/

在開始前我們需要了解下基本的結(jié)構(gòu)概念:

Bundle: 類似OSGI規(guī)范里面bundle(組件)的概念,每個bundle有自己的classloader,與其他bundle相隔離,同時Atlas框架下bundle有自身的資源段(PackageID,打包時AAPT指定);另外與原有OSGI所定義的service格式不同之處是Atlas里面Bundle透出所有定義在Manifest里面的component,隨著service,activity的觸發(fā)執(zhí)行bundle的安裝,運行。

awb: android wireless bundle的縮寫,實際上同AAR類似,是最終構(gòu)建整包前的中間產(chǎn)物。每個awb最終會打成一個bundle。awb與aar的唯一不同之處是awb與之對應(yīng)有個packageId的定義。

host: 宿主的概念,所有的bundle可以直接調(diào)用host內(nèi)的代碼和資源,所以host常常集合了公共的中間件,UI資源等。host和bundle的依賴關(guān)系如下圖所示:


如何進行Atlas框架入門    


從上圖也可以看出基于Atlas構(gòu)建后大致工程的結(jié)構(gòu):

  1. 首先有個構(gòu)建整體APK工程Apk_builder,里面管理著所有的依賴(包括atlas)及其版本,Apk_builder本身可能不包含任何代碼,只負責構(gòu)建使用

  2. host內(nèi)部包含獨立的中間件,以及一個Base的工程,里面可能包含應(yīng)用的Application,應(yīng)用icon等基礎(chǔ)性內(nèi)容(如果足夠獨立,application也可以直接放在apk_builder內(nèi));

  3. 業(yè)務(wù)層基本上以bundle為邊界自上而下與host發(fā)生調(diào)用,同時bundle之間允許存在依賴關(guān)系;相對業(yè)務(wù)獨立的bundle如果存在接口耦合建議封裝成aidl service的方式保證自身封裝性;同時某些中間件如果只存在若干bundle使用的也可以封裝bundle的方式提供出來,以保證host內(nèi)容精簡

  4. remote bundle: 遠程bundle,遠程bundle只是apk構(gòu)建時并未打到apk內(nèi)部,而是單獨放在了云端;同時遠程bundle的限制條件是第一次被觸發(fā)的前提是bundle內(nèi)的Activity需要被start,此時基于Atlas內(nèi)的ClassNotFoundInterceptorCallback可以進行跳轉(zhuǎn)的重定向,提示用戶下載具體bundle,待用戶確定后進行異步下載同時完成后再跳轉(zhuǎn)到目標bundle

主工程容器接入Atlas開源的代碼內(nèi)容主要包括以下幾個模塊:

  • 基于gradle的構(gòu)建插件(包括修改過的aapt內(nèi)容);

  • android端測容器運行庫atlas_core;

  • 基于容器提供更新能力的庫atlas_update;


我的首要任務(wù)也是引入以下幾個內(nèi)容:

1. 引用插件及依賴倉庫

內(nèi)容有刪減,只貼比較關(guān)鍵的位置

buildscript {
    repositories {
        mavenLocal()
        jcenter()
        maven {
            //           url "http://mvnrepo.alibaba-inc.com/mvn/repository"
            url "http://maven.aliyun.com/nexus/content/groups/public"
        }

    }
    dependencies {
        classpath "com.taobao.android:atlasplugin:2.3.3.rc41"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
   

注意:盡量不要指定 classpath "com.android.tools.build:gradle"的版本,Altas有默認使用

2.應(yīng)用pluginapply plugin: 'com.taobao.atlas'//依賴atlas-pulgin組件

3.添加運行庫依賴 

 compile “com.taobao.android:atlas_core:5.0.7.55@aar”//依賴atlas-core引擎代碼組件
 compile “com.taobao.android:atlasupdate:1.1.4.14@aar”//依賴atlas-update更新代碼組件
   


4.開啟atlas容器功能atlas 

atlasEnable字段需要指定為true才能開啟打包階段的基于容器擴展的task

atlas {

    atlasEnabled true
    tBuildConfig {
        autoStartBundles = ['com.taobao.firstbundle'] //自啟動bundle配置
    }
    patchConfigs {
        debug {
            createTPatch true
        }
    }
    manifestOptions {
        addAtlasProxyComponents true
    }
    buildTypes {
        debug {
            if (apVersion) {
                baseApDependency "com.taobao.android.atlasdemo:AP-debug:${apVersion}@ap"
                patchConfig patchConfigs.debug
            }
        }
    }
}
   


后續(xù)兩個設(shè)置用語動態(tài)部署打包時的開關(guān)設(shè)置,其余字段參考配置列表中的使用方式

基本上配置到這里項目gradle和主app gradle已經(jīng)配置的差不多了。接下來是bundle的gradle配置,也就是插件的gradle配置,添加如下內(nèi)容即可將lib工程的Model配置為插件

apply plugin: 'com.taobao.atlas'
atlas {
    bundleConfig {
        awbBundle true
    }
    buildTypes {
        debug {
            baseApFile project.rootProject.file('app/build/outputs/apk/app-debug.ap')
        }
    }
}
   


以上說了這么多其實是想完成atlas組件化框架輸出的apk包的基本機構(gòu)。那么我們來看下官方的


atlas作者提供的依賴關(guān)系圖解釋如下:


如何進行Atlas框架入門    
strutor.md


Atlas Demo作者也在structor.md里面列出了demo的依賴關(guān)系,其中mainDex指的是會被編譯進主dex的依賴;awbs指的是各個bundle,它們將以so文件的形式放在APK的lib文件夾下(這些個so文件其實就是各個業(yè)務(wù)bundle的獨立APK,只不過這個APK可能要依賴容器里面的中間件代碼才能運行,只是后綴改成了so而已),從awbs中也可以看出secondbundlelibrary只被secondbundle依賴。

如上所示我們可以知道,我們所要驗證的結(jié)果是主站app咱mainDex中,而插件都是以so的形式存儲在APK的lib文件夾下,我們的工程目錄如下


如何進行Atlas框架入門    


工程中包含主app和插件firstbundle


我們打出的包中l(wèi)ib中的內(nèi)容為(原諒我沒有mac。。。不能輸出詳情圖,各位有心的可以去驗證):


如何進行Atlas框架入門    


支持,我們要分析atlas的環(huán)境搭建已經(jīng)沒問題了。

上述就是小編為大家分享的如何進行Atlas框架入門了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI