日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Studio Flavors详解

發(fā)布時間:2023/12/14 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Studio Flavors详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這兩天發(fā)現(xiàn)Android Studio?Flavors用起來相當給力!這里跟大家分享下:
Flavors中文翻譯過來叫口味,不知道確切叫法是啥,它的功能就是允許你的APP有多個不同的版本,不同版本的代碼可以不一樣,如果多渠道打包(咦!這樣看到中文中渠道很貼切呀,哈哈),可以有baidu,360等等!
我今天這個Android Studio教程講這個不是多渠道打包,這塊交給專業(yè)打包的GG,我們這里講適合做項目開發(fā)的用法。

我們把項目分兩個flavors

mock:模擬版,這里所有數(shù)據(jù)都用寫好的模擬數(shù)據(jù)來運行APP

當你要開發(fā)一個新功能,但是服務器代碼還沒有寫好的時候怎么辦?
傻等么,Of cause not!我們切換到mock版用模擬數(shù)據(jù)繼續(xù)往下搞。

prod:真實版,這里所有數(shù)據(jù)都用真實數(shù)據(jù)來運行APP

當服務器開發(fā)好了,要聯(lián)調(diào)了我們再切換到prod版來調(diào)。

光說沒用,無圖無真相:
選中項目,右鍵->Open Module Settings?打開Preject Structure

選中Flavors?點擊“+” Name?mock?再點“+”添加一個prodOK

然后看我們appbuild.gradle加了以下內(nèi)容

android?{

????...

????productFlavors {

????????prod {

????????}

????????mock?{

????????}

????}

}

到這一步,也沒看出什么不一樣的。注意看,下面變化開始了
選中app-src?右鍵New->Directory新建文件夾mock

接著選中剛剛建的mock文件夾,右鍵New->Directory新建文件夾java

同理新建prod.java文件夾,最后結(jié)果如下:

細心的你會發(fā)現(xiàn)mock下的java文件夾是藍色的,prod文件夾則不是,why
那是因為當前默認編譯是在mock?這個Flavor
點擊左下角的Build Variants打開窗口,可以看到app module?當前的Build VariantmockDebug
你可以試試把mockDebug改為prodDebug再回到Project窗口,這一次是prod下的java為藍色的了。


回來,選中mock下的java,右鍵?New->package新建一個和main中一模一樣的包,這里是cn.huangx.mvpsample3

同理,把Build Variant切換到prodDebug同樣新建一個一樣的包,最后結(jié)果如下:

選中所建包名右鍵New->Java Class新建一個ModelManager

然后切換到mock版同一位置也建一個一樣名字的ModelManager
這里注意一點,在mockprod建的文件必須是一樣的,而且要是main里不能有的。
因為mock版的所有文件是main+mock里的,prod版的所有文件是main+prod里的
最后畫風是這樣的:

切換到mock(要習慣,這一篇經(jīng)常要切來切去)新建model包,并在包下新建一個FakeUserModel類,這個就是我們的模擬數(shù)據(jù)類了

下面看FakeUserModel類內(nèi)容:

public?class FakeUserModel implements IUserModel?{

?

????Handler handler =?new?Handler();

?

????/**

?????* 登錄

?????*

?????* @param username 用戶名

?????* @param password 密碼

?????* @param callback 回調(diào)

?????*/

????@Override

????public void login(final String username, final String password, final Callback callback)?{

????????handler.postDelayed(new?Runnable() {//延時200ms回調(diào),模擬網(wǎng)絡請求

????????????@Override

????????????public void run()?{

????????????????if?("huangx".equals(username) &&?"123456".equals(password)) {

????????????????????callback.onSuccess();

????????????????}?else?{

????????????????????callback.onFailure("用戶名或密碼錯誤(mock)");

????????????????}

????????????}

????????},?2000);

????}

}

FakeUserModel實現(xiàn)了IUserModel接口,與main中的UserModel一模一樣,為了區(qū)分onFailure信息后面加上(mock)
要明白這一點,FakeUserModel是假的,main中的UserModel才是調(diào)用真實數(shù)據(jù),這個Demo里為了演示,main沒有用真實實現(xiàn),記住就好!

然后是mockModelManager內(nèi)容:

public?class?ModelManager?{

????public static IUserModel provideUserModel()?{

????????return?new?FakeUserModel();

????}

}

提供一個靜態(tài)方法provideUserModel產(chǎn)生一個FakeUserModel

切換到prod版,這里的ModelManager是這樣的:

public?class?ModelManager?{

????public static IUserModel provideUserModel()?{

????????return?new?UserModel();

????}

}

這里的provideUserModel方法產(chǎn)生的就是真實的IUserModel實現(xiàn)

重頭戲來了,我們回到mainLoginActivityonCreateLoader方法,把new UserModel()替換成ModelManager.provideUserModel()

public Loader<LoginPresenter> onCreateLoader(int id, Bundle args)?{

????????return?new?PresenterLoader(this,?new?PresenterFactory<LoginPresenter>() {

????????????@Override

????????????public LoginPresenter create()?{

????????????????return?new?LoginPresenter(ModelManager.provideUserModel());

????????????}

????????});

????}

搞定這一步后就是HAPPY的時候了:
切換到mockLoginPresenter傳入的參數(shù)IUserModel就是真實環(huán)境的UserModel
切換到prodLoginPresenter傳入的參數(shù)IUserModel就是模擬環(huán)境的FakeUserModel
服務器沒好我切mock自已搞,服務器好了我切prod跟你調(diào),哈哈,媽媽再也不用擔我調(diào)接口了!

?


原文來自:簡書/仙鬼

總結(jié)

以上是生活随笔為你收集整理的Android Studio Flavors详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。