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

歡迎訪問 生活随笔!

生活随笔

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

Android

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

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

這兩天發現Android Studio 的Flavors用起來相當給力!這里跟大家分享下:

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

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

我們把項目分兩個flavors:

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

當你要開發一個新功能,但是服務器代碼還沒有寫好的時候怎么辦?

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

prod:真實版,這里所有數據都用真實數據來運行APP

當服務器開發好了,要聯調了我們再切換到prod版來調。

光說沒用,無圖無真相:

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

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

Paste_Image.png

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

Paste_Image.png

然后看我們app的build.gradle加了以下內容

android {

...

productFlavors {

prod {

}

mock {

}

}

}

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

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

Paste_Image.png

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

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

Paste_Image.png

細心的你會發現mock下的java文件夾是藍色的,prod文件夾則不是,why?

那是因為當前默認編譯是在mock 這個Flavor

點擊左下角的Build Variants打開窗口,可以看到app module 當前的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同樣新建一個一樣的包,最后結果如下:

Paste_Image.png

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

Paste_Image.png

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

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

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

最后畫風是這樣的:

Paste_Image.png

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

Paste_Image.png

下面看FakeUserModel類內容:

public class FakeUserModel implements IUserModel {

Handler handler = new Handler();

/**

* 登錄

*

* @param username 用戶名

* @param password 密碼

* @param callback 回調

*/

@Override

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

handler.postDelayed(new Runnable() {//延時200ms回調,模擬網絡請求

@Override

public void run() {

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

callback.onSuccess();

} else {

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

}

}

}, 2000);

}

}

FakeUserModel實現了IUserModel接口,與main中的UserModel一模一樣,為了區分onFailure信息后面加上(mock)。

要明白這一點,FakeUserModel是假的,main中的UserModel才是調用真實數據,這個Demo里為了演示,main沒有用真實實現,記住就好!

然后是mock中ModelManager內容:

public class ModelManager {

public static IUserModel provideUserModel() {

return new FakeUserModel();

}

}

提供一個靜態方法provideUserModel產生一個FakeUserModel。

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

public class ModelManager {

public static IUserModel provideUserModel() {

return new UserModel();

}

}

這里的provideUserModel方法產生的就是真實的IUserModel實現

重頭戲來了,我們回到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傳入的參數IUserModel就是真實環境的UserModel

切換到mock版LoginPresenter傳入的參數IUserModel就是模擬環境的FakeUserModel

服務器沒好我切mock自已搞,服務器好了我切prod跟你調,哈哈,媽媽再也不用擔心我調接口了!

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。