這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何進(jìn)行Atlas框架入門,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供麻江網(wǎng)站建設(shè)、麻江做網(wǎng)站、麻江網(wǎng)站設(shè)計(jì)、麻江網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、麻江企業(yè)網(wǎng)站模板建站服務(wù),10年麻江做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
我們在學(xué)習(xí)一門新語言或者新框架之前總喜歡干一件事情?!瓾ello World’。一般情況下我們都希望輸出一個簡單的demo以證明我們通過了某項(xiàng)內(nèi)容的基本環(huán)境搭建。沒錯,程序員是一種可以創(chuàng)超世界的生物,正如我們所寫的hello world一般,因?yàn)?we are our god!!
Android環(huán)境配置:
Android Studio 2.3.1
gradle 3.3
gradle plugin atlas插件自適用
jdk1.8
compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { applicationId "com.atlas.analysis" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" }
前兩天適用 Android studio 3.0.1做atlas的demo可整蒙逼了,后續(xù)我們改造gradle再說遇到的種種坑。mabye到時(shí)間atlas官方已經(jīng)適配。不太理解atlas結(jié)構(gòu)和打包流程的可以參考官網(wǎng):
https://alibaba.github.io/atlas/
在開始前我們需要了解下基本的結(jié)構(gòu)概念:
Bundle: 類似OSGI規(guī)范里面bundle(組件)的概念,每個bundle有自己的classloader,與其他bundle相隔離,同時(shí)Atlas框架下bundle有自身的資源段(PackageID,打包時(shí)AAPT指定);另外與原有OSGI所定義的service格式不同之處是Atlas里面Bundle透出所有定義在Manifest里面的component,隨著service,activity的觸發(fā)執(zhí)行bundle的安裝,運(yùn)行。
awb: android wireless bundle的縮寫,實(shí)際上同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構(gòu)建后大致工程的結(jié)構(gòu):
首先有個構(gòu)建整體APK工程Apk_builder,里面管理著所有的依賴(包括atlas)及其版本,Apk_builder本身可能不包含任何代碼,只負(fù)責(zé)構(gòu)建使用
host內(nèi)部包含獨(dú)立的中間件,以及一個Base的工程,里面可能包含應(yīng)用的Application,應(yīng)用icon等基礎(chǔ)性內(nèi)容(如果足夠獨(dú)立,application也可以直接放在apk_builder內(nèi));
業(yè)務(wù)層基本上以bundle為邊界自上而下與host發(fā)生調(diào)用,同時(shí)bundle之間允許存在依賴關(guān)系;相對業(yè)務(wù)獨(dú)立的bundle如果存在接口耦合建議封裝成aidl service的方式保證自身封裝性;同時(shí)某些中間件如果只存在若干bundle使用的也可以封裝bundle的方式提供出來,以保證host內(nèi)容精簡
remote bundle: 遠(yuǎn)程bundle,遠(yuǎn)程bundle只是apk構(gòu)建時(shí)并未打到apk內(nèi)部,而是單獨(dú)放在了云端;同時(shí)遠(yuǎn)程bundle的限制條件是第一次被觸發(fā)的前提是bundle內(nèi)的Activity需要被start,此時(shí)基于Atlas內(nèi)的ClassNotFoundInterceptorCallback可以進(jìn)行跳轉(zhuǎn)的重定向,提示用戶下載具體bundle,待用戶確定后進(jìn)行異步下載同時(shí)完成后再跳轉(zhuǎn)到目標(biāo)bundle
主工程容器接入Atlas開源的代碼內(nèi)容主要包括以下幾個模塊:
基于gradle的構(gòu)建插件(包括修改過的aapt內(nèi)容);
android端測容器運(yùn)行庫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有默認(rèn)使用
2.應(yīng)用pluginapply plugin: 'com.taobao.atlas'//依賴atlas-pulgin組件
3.添加運(yùn)行庫依賴
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才能開啟打包階段的基于容器擴(kuò)展的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)部署打包時(shí)的開關(guān)設(shè)置,其余字段參考配置列表中的使用方式
基本上配置到這里項(xiàng)目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') } } }
以上說了這么多其實(shí)是想完成atlas組件化框架輸出的apk包的基本機(jī)構(gòu)。那么我們來看下官方的
Atlas Demo作者也在structor.md里面列出了demo的依賴關(guān)系,其中mainDex指的是會被編譯進(jìn)主dex的依賴;awbs指的是各個bundle,它們將以so文件的形式放在APK的lib文件夾下(這些個so文件其實(shí)就是各個業(yè)務(wù)bundle的獨(dú)立APK,只不過這個APK可能要依賴容器里面的中間件代碼才能運(yùn)行,只是后綴改成了so而已),從awbs中也可以看出secondbundlelibrary只被secondbundle依賴。
如上所示我們可以知道,我們所要驗(yàn)證的結(jié)果是主站app咱mainDex中,而插件都是以so的形式存儲在APK的lib文件夾下,我們的工程目錄如下
我們打出的包中l(wèi)ib中的內(nèi)容為(原諒我沒有mac。。。不能輸出詳情圖,各位有心的可以去驗(yàn)證):
支持,我們要分析atlas的環(huán)境搭建已經(jīng)沒問題了。
上述就是小編為大家分享的如何進(jìn)行Atlas框架入門了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。