我有一个项目,在一个班级中使用蓝牙低功耗扫描。从API 21开始,Android已经弃用了我使用的一些方法,并希望我用新的方法替换它们。我并不是真的想要切断所有API 19和20,所以我试图研究Gradle风味。
到目前为止我发现的是,为了创建不同的口味,您需要两个不同的包,用于包含不同源代码的两种口味。
我的问题是:如果我只需要一个班级中的差异,我应该尝试使用口味吗?另外,我应该怎么做呢?我已经查看了Gradle文档了,但是并没有多少但是如何声明不同的风格,而不是实际的设置。
我在flavors,
的部分中找到了这个一个图书馆用英语'定义。和' french'味道。在编译“法语”时变体,定义了一个单独的宏,它导致生成不同的二进制文件。
但这就是它的意义。我如何实际设置二进制和更改?谢谢!
答案 0 :(得分:1)
gradle风味的一个例子:
android {
...
defaultConfig { ... }
signingConfigs { ... }
buildTypes { ... }
productFlavors {
demo {
applicationId "com.buildsystemexample.app.demo"
versionName "1.0-demo"
buildConfigField 'Boolean', 'isDemo', 'true'
}
full {
applicationId "com.buildsystemexample.app.full"
versionName "1.0-full"
buildConfigField 'Boolean', 'isDemo', 'false'
}
}
}
您可以为每个构建版本添加不同的源代码。
请阅读此页:https://developer.android.com/tools/building/configuring-gradle.html
答案 1 :(得分:0)
你可以用风味来做到这一点,但因为它只是一个类我建议做这样的事情:
首先,创建一个界面:
public interface Something{
//Put anything that will be common to both classes here.
public void doSomething();
}
创建两个实现该接口的类。一个使用新的令人兴奋的版本:
public class SomethingWithNewStuff implements Something{
@Override
public void doSomething(){
//Go nuts and use new fancy features where you need them
}
}
然后覆盖旧版本需要更新的方法:
public class LegacySomething implements Something{
@Override
public void doSomething(){
//do something in a legacy way.
}
}
然后,当您实例化该类时:
Something something;
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){
something = new SomethingWithNewStuff();
} else{
something = new LegacySomething();
}
something.doSomething();
根据您的具体操作,您可以通过多种方式实现相同的功能。在某些情况下,让一个类扩展另一个类而不是从公共接口继承等等可能更好。
无论哪种方式,最终这可能比维护两个单独的构建以进行小的更改要少。