Android Studio module + gradle的巧妙运用
来源:互联网 发布:云短信软件 编辑:程序博客网 时间:2024/06/05 08:39
目标:用一个工程的代码打包五个app,并实现更新一个功能时使所有工程内的app同步更新
先上结果图:
改前
改后
**
1:写这篇博客的原因
**
由于项目中集成了个推推送sdk,导致近日google发邮件通知由于违反隐私协议将会下架公司的几个app。
个推sdk也进行了修改,发布了所谓的谷歌专版…
这个问题好解决,替换jar跟so就行
问题在于几个子版本app都是由拷贝母版本的工程文件修改软件图标,启动画面制作完成的。代码重复,资源重复。导致即使是替换一个jar包这样的小更新都需要打开5.6个工程进行替换、打包。
几个弊端:
1:维护困难
app中如果出现bug需要修改,则需要现在母版本上面改好,然后将修改的地方重新在子版本上同步进行修改。有时一个小问题(如上面所说的更新jar包,我需要打开五六个工程替换)当一个技术活变成了繁琐活之后,就得做点改变了
2:不方便扩展
3 多次复制工程文件,内存占用太多
电脑256G固态硬盘,放系统放软件放工程文件,内存吃紧…
由于在此期间同时也在做IOS,看了公司IOS的工程代码,发现XCode上的工程,有个叫“target”的东西
一个工程内可以创建多个target,每个target可以选择引用的文件、资源以及配置文件,由此来实现代码的复用以及资源文件的区分。
XCode target介绍
打个比方,我需要修改一下app的服务器地址
用Android 这边的写法就是打开5、6个工程,将工程内写上服务器地址的字符串的地方修改成最新的服务器
而在IOS这边,由于写着服务器地址的文件是5、6个app共同引用的,所以我只需要修改一处地方,而后将服务器地址修改完成直接打包就可以完成服务器地址的更新
2 Android studio module+gradle实现类似xcode target功能
废话说完了,开始进入正题
首先要明白一点,Android studio的构建方式是module+gradle构建脚本来完成的,且一个module对应一个gradle脚本
module内则放置java代码,资源文件
gradle内保存的信息有appid(软件包名、app唯一标识符),在Android studio创建module的时候会自动生成一个build.gradle脚本
这么一说思路就有了,两个module,一个放置主要的逻辑代码跟必要的资源文件,另一个放置appIcon跟launchImage并引用前一个module,如此一来就能完美实现我之前的需求:代码复用,资源区分开来
1在工程上新建module
2选择phone&tablet Module
3接下来选择不添加activity
创建完后工程结构就变成了这样
此时自动生成一个build.gradle脚本,module内自动生成manifest文件,java、res文件夹
删除java文件夹下的androidTest和test包,并于build.gradle内删除创建module时自动生成的引用(一般来说就是一个Androidtest框架和appcompat包) 此时我们注释掉它
还有defaultConfig配置内的这句
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
要实现引用,需要在childapp的build.gradle内添加
compile project (':app')//注意,此处为冒号+源码module名
美滋滋 此时sync gradle 进度条转着转着发现出问题了
因为此时工程引用的源码module是一个application
而作为引用module,需要将结尾的application改为library
继续编译,继续出错
一眼就看明白,library工程不能设置appid 所以注释掉原有的appid
注意:子module的gradle脚本内的minSdkVersion不可低于源码gradle脚本内的MinSdkVersion
更改时注意检查,最好将其一致,否则会编译报错
同步gradle,大功告成
- Android Studio module + gradle的巧妙运用
- android权重的巧妙运用
- Android Studio中Module的build.gradle详解
- Android Studio中Module的build.gradle详解
- Android Studio中Module的build.gradle详解
- Android Studio删除project下的module后弹出:Gradle failed: already disposed module:XX 问题:
- Android studio删除module后Gradle failed: already disposed module 的问题解决
- 数组的巧妙运用
- Android Studio中Module下的gradle文件的基本配置
- Android Studio中module配置好的bulid.gradle和混淆proguard-rules.pro
- Android Studio如何import module(针对非gradle)
- Android Studio如何import module(针对非gradle)
- Android Studio如何import module(针对非gradle)
- android studio的gradle问题
- android studio,gradle的问题
- Android studio的gradle配置
- android studio 的gradle命令
- Android Studio的Gradle解析
- Mysql开启GTID后遇到错误跳过方法
- springMVC的文件上传于下载
- java String类中的intern方法
- 浅析linux中的连接文件
- springboot1.5.6版本运行时动态切换日志级别
- Android Studio module + gradle的巧妙运用
- Restful形式接口文档生成之Swagger与SpringMVC整合手记
- PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送
- R语言安装.tar.gz包方法
- 【原创】技术员 Ghost Win 10(x86/x64)企业版/专业版(附属Xp/Win7系统下载)
- HTML5-移动开发常用技巧与弹性布局的使用
- 剑指Offer—48—不用加减乘除做加法
- easyui combobox 输入下拉框不存在的值校验
- Js中slite,splice,slice,join方法的用法区别