android studio int转,Android Studio Flavors的妙用(转)
這兩天發(fā)現(xiàn)Android Studio 的Flavors用起來相當(dāng)給力!這里跟大家分享下:
Flavors中文翻譯過來叫“口味”,不知道確切叫法是啥,它的功能就是允許你的APP有多個(gè)不同的版本,不同版本的代碼可以不一樣,如多渠道打包(咦!這樣看到中文渠道很貼切呀,哈哈),可以有baidu,360等等!
我今天講這個(gè)不是多渠道打包,這塊交給專業(yè)打包的GG,我們這里講適合做項(xiàng)目開發(fā)的用法。
我們把項(xiàng)目分兩個(gè)flavors:
mock:模擬版,這里所有數(shù)據(jù)都用寫好的模擬數(shù)據(jù)來運(yùn)行APP
當(dāng)你要開發(fā)一個(gè)新功能,但是服務(wù)器代碼還沒有寫好的時(shí)候怎么辦?
傻等么,Of cause not!我們切換到mock版用模擬數(shù)據(jù)繼續(xù)往下搞。
prod:真實(shí)版,這里所有數(shù)據(jù)都用真實(shí)數(shù)據(jù)來運(yùn)行APP
當(dāng)服務(wù)器開發(fā)好了,要聯(lián)調(diào)了我們?cè)偾袚Q到prod版來調(diào)。
光說沒用,無圖無真相:
這里使用我上一篇文章的項(xiàng)目:Android MVP高級(jí)
選中項(xiàng)目,右鍵->Open Module Settings 打開Preject Structure
Paste_Image.png
選中Flavors 點(diǎn)擊“+” Name 填mock 再點(diǎn)“+”添加一個(gè)prod點(diǎn)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
細(xì)心的你會(huì)發(fā)現(xiàn)mock下的java文件夾是藍(lán)色的,prod文件夾則不是,why?
那是因?yàn)楫?dāng)前默認(rèn)編譯是在mock 這個(gè)Flavor
點(diǎn)擊左下角的Build Variants打開窗口,可以看到app module 當(dāng)前的Build Variant是mockDebug
你可以試試把mockDebug改為prodDebug再回到Project窗口,這一次是prod下的java為藍(lán)色的了。
Paste_Image.png
回來,選中mock下的java,右鍵 New->package新建一個(gè)和main中一模一樣的包,這里是cn.huangx.mvpsample3
Paste_Image.png
同理,把Build Variant切換到prodDebug同樣新建一個(gè)一樣的包,最后結(jié)果如下:
Paste_Image.png
選中所建包名右鍵New->Java Class新建一個(gè)ModelManager
Paste_Image.png
然后切換到mock版同一位置也建一個(gè)一樣名字的ModelManager。
這里注意一點(diǎn),在mock和prod建的文件必須是一樣的,而且要是main里不能有的。
因?yàn)閙ock版的所有文件是main+mock里的,prod版的所有文件是main+prod里的
最后畫風(fēng)是這樣的:
Paste_Image.png
切換到mock版(要習(xí)慣,這一篇經(jīng)常要切來切去)新建model包,并在包下新建一個(gè)FakeUserModel類,這個(gè)就是我們的模擬數(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() {//延時(shí)200ms回調(diào),模擬網(wǎng)絡(luò)請(qǐng)求
@Override
public void run() {
if ("huangx".equals(username) && "123456".equals(password)) {
callback.onSuccess();
} else {
callback.onFailure("用戶名或密碼錯(cuò)誤(mock)");
}
}
}, 2000);
}
}
FakeUserModel實(shí)現(xiàn)了IUserModel接口,與main中的UserModel一模一樣,為了區(qū)分onFailure信息后面加上(mock)。
要明白這一點(diǎn),FakeUserModel是假的,main中的UserModel才是調(diào)用真實(shí)數(shù)據(jù),這個(gè)Demo里為了演示,main沒有用真實(shí)實(shí)現(xiàn),記住就好!
然后是mock中ModelManager內(nèi)容:
public class ModelManager {
public static IUserModel provideUserModel() {
return new FakeUserModel();
}
}
提供一個(gè)靜態(tài)方法provideUserModel產(chǎn)生一個(gè)FakeUserModel。
切換到prod版,這里的ModelManager是這樣的:
public class ModelManager {
public static IUserModel provideUserModel() {
return new UserModel();
}
}
這里的provideUserModel方法產(chǎn)生的就是真實(shí)的IUserModel實(shí)現(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的時(shí)候了:
切換到prod版LoginPresenter傳入的參數(shù)IUserModel就是真實(shí)環(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的妙用(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分区表修复工具--DISKFIX
- 下一篇: 制作WIN7、WINPE2003、Ubu