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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android studio int转,Android Studio Flavors的妙用(转)

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

這兩天發(fā)現(xiàn)Android Studio 的Flavors用起來相當(dāng)給力!這里跟大家分享下:

Flavors中文翻譯過來叫“口味”,不知道確切叫法是啥,它的功能就是允許你的APP有多個不同的版本,不同版本的代碼可以不一樣,如多渠道打包(咦!這樣看到中文渠道很貼切呀,哈哈),可以有baidu,360等等!

我今天講這個不是多渠道打包,這塊交給專業(yè)打包的GG,我們這里講適合做項目開發(fā)的用法。

我們把項目分兩個flavors:

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

當(dāng)你要開發(fā)一個新功能,但是服務(wù)器代碼還沒有寫好的時候怎么辦?

傻等么,Of cause not!我們切換到mock版用模擬數(shù)據(jù)繼續(xù)往下搞。

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

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

光說沒用,無圖無真相:

這里使用我上一篇文章的項目:Android MVP高級

選中項目,右鍵->Open Module Settings 打開Preject Structure

Paste_Image.png

選中Flavors 點擊“+” Name 填mock 再點“+”添加一個prod點OK

Paste_Image.png

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

android {

...

productFlavors {

prod {

}

mock {

}

}

}

到這一步,也沒看出什么不一樣的。注意看,下面變化開始了

選中app-src 右鍵New->Directory新建文件夾mock

Paste_Image.png

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

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

Paste_Image.png

細心的你會發(fā)現(xiàn)mock下的java文件夾是藍色的,prod文件夾則不是,why?

那是因為當(dāng)前默認(rèn)編譯是在mock 這個Flavor

點擊左下角的Build Variants打開窗口,可以看到app module 當(dāng)前的Build Variant是mockDebug

你可以試試把mockDebug改為prodDebug再回到Project窗口,這一次是prod下的java為藍色的了。

Paste_Image.png

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

Paste_Image.png

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

Paste_Image.png

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

Paste_Image.png

然后切換到mock版同一位置也建一個一樣名字的ModelManager。

這里注意一點,在mock和prod建的文件必須是一樣的,而且要是main里不能有的。

因為mock版的所有文件是main+mock里的,prod版的所有文件是main+prod里的

最后畫風(fēng)是這樣的:

Paste_Image.png

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

Paste_Image.png

下面看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)絡(luò)請求

@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),記住就好!

然后是mock中ModelManager內(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)

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

public Loader onCreateLoader(int id, Bundle args) {

return new PresenterLoader(this, new PresenterFactory() {

@Override

public LoginPresenter create() {

return new LoginPresenter(ModelManager.provideUserModel());

}

});

}

搞定這一步后就是HAPPY的時候了:

切換到prod版LoginPresenter傳入的參數(shù)IUserModel就是真實環(huán)境的UserModel

切換到mock版LoginPresenter傳入的參數(shù)IUserModel就是模擬環(huán)境的FakeUserModel

服務(wù)器沒好我切mock自已搞,服務(wù)器好了我切prod跟你調(diào),哈哈,媽媽再也不用擔(dān)心我調(diào)接口了!

總結(jié)

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

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