君不见长松卧壑困风霜,时来屹立扶明堂。这篇文章主要讲述Android Studio Flavors的妙用(转)相关的知识,希望能为你提供帮助。
【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<
LoginPresenter>
onCreateLoader(int id, Bundle args) {
return new PresenterLoader(this, new PresenterFactory<
LoginPresenter>
() {
@Override
public LoginPresenter create() {
return new LoginPresenter(ModelManager.provideUserModel());
}
});
}
搞定这一步后就是HAPPY的时候了:
切换到prod版LoginPresenter传入的参数IUserModel就是真实环境的UserModel
切换到mock版LoginPresenter传入的参数IUserModel就是模拟环境的FakeUserModel
服务器没好我切mock自已搞,服务器好了我切prod跟你调,哈哈,妈妈再也不用担心我调接口了!
代码看这里
作者:仙鬼
链接:https://www.jianshu.com/p/3ce164863d44
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
推荐阅读
- Android之Error: 'L' is not a valid file-based resource name character解决办法
- android开发默认图标怎么换()
- android测试 adb命令Monkey命令
- Android_???????????????
- 升级到 Android Studio 3.0 + Gradle 4.1 遇到的一些坑及解决方案
- Android Studio启动时出现unable to access android sdk add-on list
- Xamarin.Android RelativeLayout
- 设置Android Studio工程布局文件的默认布局
- mybatis的Mapper代理原理