关于android studio 中android library module的两个问题
2018-02-08 18:51
405 查看
实际开发中遇到过这样的问题:
1、android library module的Build Variants怎么切换,都是编译的release版本。
2、android library module中无法添加productFlavors,现象是添加后主module就会提示找不到类
在没有找到解决方法时,问题1就只能手动改build.gradle文件,再来编译。问题2就直接使用buildTypes来代替了,模糊了界线。。
其实这两个问题都是用同一个方法解决的。
先带大家看一段源码,进入defaultConfig中,是的,就是build.gradle,android下的defaultConfig,可以看到两个参数
defaultPublishConfig,意思是library module只能以release方式编译,无论我们怎么切换,而publicshNonDefault是一个开关,true表示关闭defaultPublishConfig默认值,反之,打开。所以要想解决问题1,我们至少要先将这个开关设置成true。
首先,在library module 的build.gradle上添加的android中添加android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
publishNonDefault true
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
}
}但即使这样,我们去切换Build Variants,会有提示,然后还是没有用。
接下去我们要做的,将library module的productFlavors的编译选择“搬到”主module中去,直白来说就是在主module中创建一一对应的productFlavors。看操作
在library module中创建,我们所需的productFlavorsproductFlavors {
xiaomi {
}
huawei {
}
}接着,你就可以在主module中指定编译的版本了
导入library module时,原本是compile project(':lib_module')改成
我们将xiaomiRelease包指定为debug版本了,可以发现第一个debugCompile 是指主module的buildType(也可以productFlavors),后面的configuration是library module的productFlavors+buildType
这样切换主module的Build Variants,library moudle也会跟着改变,运行后也是预想中的版本了。
但是上面的例子有点奇怪,debug对应是xiaomi,我们可以再进行修改
例如直接在主moudle中添加一样的,buildTypes或productFlavors都可以
buildTypes(productFlavors) {
xiaomi {
}
huawei {
}
}
然后导入library就可以改成
这样编译下,buildTypes都是非debug版本,即需要签名后才方便安装。
可能大家会有些乱,实际操作后就会好理解多了
最后还有一个问题,我们都知道N个buildTypes和M个productFlavors可以产生N*M个编译结果,所以,其实基本上例子,在方module中我们得创建2*2个buildTypes来对应lib
buildTypes {
xiaomiDebug.initWith(buildTypes.debug)//声明此类型也是debug
xiaomiDebug{
}
xiaomiRelease{ } huaweiDebug.initWith(buildTypes.debug) huaweiDebug {
}
1、android library module的Build Variants怎么切换,都是编译的release版本。
2、android library module中无法添加productFlavors,现象是添加后主module就会提示找不到类
在没有找到解决方法时,问题1就只能手动改build.gradle文件,再来编译。问题2就直接使用buildTypes来代替了,模糊了界线。。
其实这两个问题都是用同一个方法解决的。
先带大家看一段源码,进入defaultConfig中,是的,就是build.gradle,android下的defaultConfig,可以看到两个参数
defaultPublishConfig,意思是library module只能以release方式编译,无论我们怎么切换,而publicshNonDefault是一个开关,true表示关闭defaultPublishConfig默认值,反之,打开。所以要想解决问题1,我们至少要先将这个开关设置成true。
首先,在library module 的build.gradle上添加的android中添加android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
publishNonDefault true
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
}
}但即使这样,我们去切换Build Variants,会有提示,然后还是没有用。
接下去我们要做的,将library module的productFlavors的编译选择“搬到”主module中去,直白来说就是在主module中创建一一对应的productFlavors。看操作
在library module中创建,我们所需的productFlavorsproductFlavors {
xiaomi {
}
huawei {
}
}接着,你就可以在主module中指定编译的版本了
导入library module时,原本是compile project(':lib_module')改成
debugCompile project(path :':lib_module', configuration: 'xiaomiRelease') releaseCompile project(path: ':lib_module', configuration: 'huaweiRelease')
我们将xiaomiRelease包指定为debug版本了,可以发现第一个debugCompile 是指主module的buildType(也可以productFlavors),后面的configuration是library module的productFlavors+buildType
这样切换主module的Build Variants,library moudle也会跟着改变,运行后也是预想中的版本了。
但是上面的例子有点奇怪,debug对应是xiaomi,我们可以再进行修改
例如直接在主moudle中添加一样的,buildTypes或productFlavors都可以
buildTypes(productFlavors) {
xiaomi {
}
huawei {
}
}
然后导入library就可以改成
xiaomiCompile project(path :':lib_module', configuration: 'xiaomiRelease') huaweiCompile project(path: ':lib_module', configuration: 'huaweiRelease')
这样编译下,buildTypes都是非debug版本,即需要签名后才方便安装。
可能大家会有些乱,实际操作后就会好理解多了
最后还有一个问题,我们都知道N个buildTypes和M个productFlavors可以产生N*M个编译结果,所以,其实基本上例子,在方module中我们得创建2*2个buildTypes来对应lib
buildTypes {
xiaomiDebug.initWith(buildTypes.debug)//声明此类型也是debug
xiaomiDebug{
}
xiaomiRelease{ } huaweiDebug.initWith(buildTypes.debug) huaweiDebug {
}
huaweiRelease{} }
//导入lib
xiaomiDebugCompile project(path :':lib_module', configuration: 'xiaomiDebug')
xiaomiReleaseCompile project(path :':lib_module', configuration: 'xiaomiRelease')
huaweiDebugCompile project(path: ':lib_module', configuration: 'huaweiDebug')
huaweiReleaseCompile project(path: ':lib_module', configuration: 'huaweiRelease')这样就可以一一对应上了
相关文章推荐
- 关于ubuntu上android studio的theme editor 不显示的问题
- 软件汉化:关于ZoomIt汉化的两个关键的问题
- 关于Android studio更新后遇到java.lang.UnsatisfiedLinkError报错问题arm64-v8a,armeabi-v7a
- 关于Android studio的文件冲突问题
- 两个关于数列的Python脚本(斐波那契数列和猴子吃香蕉类问题)
- 关于ASP.NET MVC3.0 EF有两个小问题
- 两个关于Struts2的问题
- 关于ogrebullet中如何判断两个物体何时碰撞的问题
- 两个关于音频的问题
- 关于Android Studio中点9图的编译错误问题:Some file crunching failed
- 关于Android Studio在Mac下面无法正常解析Android的API问题的解决方案
- 关于两个Activity实现页面跳转问题
- 想探讨两个关于设计文档问题
- 关于ogrebullet中如何判断两个物体何时碰撞的问题
- 关于安装Android Studio的一些问题的解决方法
- 关于安装Android Studio的一些问题的解决方法
- 今天解决了两个关于.NET读取EXCEL文件的问题,记下来,很有用!
- 关于两个页面之间传值,和打开新的页面的问题
- 关于Android studio 使用极光推送,集成成功,但是推送不成功的问题
- 关于Eclipse如何加入Gradle文件与Android Studio两个平台一起开发,工作目录不发生变化 转来的