Android Studio与SVN版本控制程序的协作使用指南
作者:ceabie 发布时间:2021-11-08 15:16:08
AndroidStudio 的SVN 安装和使用方法与我以前用的其他IDE 都有很大差别,感觉特麻烦,网上相关资料很少,貌似现在 Git 比较流行,之前有用过 github 但是他只能是开源项目免费,下面总结最近自己安装和使用 SVN 的一些经验总结:
如果遇到 ignore 或其他设置无效等意外情况,可以尝试重启 androidstudio 或执行下 svn 的 update 试试
一、安装配置:
以前使用 ZendStudio 等等都是直接安装插件就可以了,但这里不行,需要自己独立安装带有 command line 功能的 SVN 客户端,我使用的是TortoiseSVN,据说 1.7 之后开始支持 command line 模式,我现在用的是 1.8.5 版本
如图,安装时必须自定义选择 command line 否则不会安装的
安装完成后,打开 IDE 的 setting 配置面板:
如上图路径 Version Control 下的 Subersion 设置:
Use Command Line Client 选择浏览到你本地安装 TortoiseSVN 的 svn.exe 文件路径,如下图:(注意输入框最右侧有个浏览的按钮,有可能没显示出来,拉伸窗口即可见)
配置好之后,安装即完成
二、导入、签出 SVN
这个比较简单的:
在 CVS 菜单下 有个 Import into Version Control 选择 svn 就行了
签出操作也差不多,也可以在新建项目中从 svn 签出并生成项目
另外:最下面一个栏目 Browse VCS Repository 可以浏览远程SVN 服务器上的文件并进行删除等操作
三、Ignore 指定忽略文件或目录
AndroidStudio 的 Setting 面板中配置的 ignore 似乎没什么效果,
下面先看看忽略掉的目录的显示效果(比较暗的黄绿颜色)
在 Setting 中的配置,主要忽略的目录和文件:(虽然感觉这里的设置不起作用,但还是设置下吧)
系统默认有两三个文件和目录,我自己添加的 .gradle .idea build 目录 我觉得这三个目录不应该跟随 svn,每次编译时每个人本地环境是不一样的,而且我之前遇到 build 和 idea 下面有个library 文件老是冲突,每次更新一大堆,所以去掉了。
通过 TortoiseSVN 来添加忽略:
对于更新和提交
这两个小按钮很方面操作,向上的绿色是commit ,向下的蓝色 是 update。
四、使用Gradle插件自动填写SVN号,并发布(拷贝)到指定目录
Gradle是一个依赖管理工具,它的GitHub项目地址如下:
https://github.com/Goddchen/Android-Gradle-Examples/tree/master/Gradle%20Library%20Projects
安装布置很方便,这里就不再多说了,下面我们具体来看
svn号:
1、classpath增加依赖:
classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.11'
(可查找下最新的版本)
2、在主项目(app的模块目录)下的build.gradle中增加:
android {....}
def getSvnRevision() {
ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
SVNClientManager clientManager = SVNClientManager.newInstance(options);
SVNStatusClient statusClient = clientManager.getStatusClient();
SVNStatus status = statusClient.doStatus(projectDir, false);
SVNRevision revision = status.getRevision();
def svnNum = revision.getNumber();
println("Svn version: " + svnNum);
println("============");
return svnNum;
}
注意下,revision要本地更新后才能取得。status中还有其他的数据,例如最后提交等。需要的可自行更改。
App 版本号:
App版本号可以在 defaultConfig 中直接配,但有时候写在 manifest.中会不容易忘。
def getVerName() {
String manifestText = file("AndroidManifest.xml").getText();
def matcherVersion = Pattern.compile("android:versionName=\"([\\d.]+).*\"").matcher(manifestText);
if (matcherVersion.find()) {
def verName = matcherVersion.group(1);
println("============");
println("App version: " + verName);
return verName;
} else {
throw new GradleException('Not find versionName in AndroidManifest');
}
}
注意下 AndroidManifest 的路径,是相对与当前的 build.gradle的,标准的AS创建是在 src/main/AndroidManifest.xml
使用 可以直接 = ,或者用 ${getVerName()}
编译后输出路径:
这有很多中做法,一种是build后拷贝,一种是直接修改variants的输出路径,这里暂时先提供后面一种:
buildTypes {
release {
// .....
applicationVariants.all { variant ->
if ("release".equals(variant.buildType.name)) {// Only Release
variant.outputs.each { output ->
def targetDir = "D:/App"; // 目标路径
output.outputFile = new File(targetDir,
"App_${getVerName()}_${getSvnRevision()}.apk");
println(output.outputFile)
}
}
}
}
}
猜你喜欢
- 说在前面:老项目、大项目适配Android X 注意了,一定要谨慎、谨慎、再谨慎。项目中用到的第三方库多的话会很麻烦,有些第三方库还没有适配
- 平时我们编写WinForm程序经常使用VS进行拖控件的方式,这样做虽然简单,但是无法深入了解WinForm程序的本质。其实,用记事本也可以编
- 一、概念Tomcat的虚拟目录即在服务器上另选择一个webapps之外的文件夹存放项目文件,通过配置Tomcat的属性,实现访问。注:未配置
- 首先给大家来讲一个我们遇到的一个奇怪的问题:1.我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器
- 1.泛型概念泛型就是将类型参数化所谓类型参数化就是将类型定义成参数的形式,然后在使用此类型的时候的时候再传入具体的类型到这我们可以看出来:泛
- 就是每隔一定的时间显示一张图片,全部图片文件位于:“工作空间\项目名称\bin\动态图\花好月圆\”文件夹下。文件名类似:1001.jpg,
- 本文实例讲述了Android中Market的Loading效果实现方法。分享给大家供大家参考。具体如下:在Android中,要实现Loadi
- 前言前段时间在写RPC框架的时候用到了Kryo、Hessian、Protostuff三种序列化方式。但是当时因为急于实现功能,就只是简单的的
- 本文实例为大家分享了C++实现大整数乘法的具体代码,供大家参考,具体内容如下#include<iostream>#include
- 智能终端上的游戏目前风头正劲,试问哪个智能手机上没有几款企鹅公司出品的游戏呢!之前从未涉猎过游戏开发,但知道游戏开发前要挑选一款合适的游戏引
- springboot 无法自动装配@Autowired 报错:无法自动装配基本上是因为1、项目里有类似mybatis @Mapper这种第三
- 很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理使用java8新特性,下面先来点基础的Lis
- 前言今天记录一个前段时间遇到的一个小问题的解决方法, 跨域!!!相信跨域这个问题, 做开发的或多或少都遇到过, 而且已经有很多博主已经分享了
- 本文实例讲述了C#常用目录文件操作类。分享给大家供大家参考。具体分析如下:这个c#类封装了常用的目录操作,包括列出目录下的文件、检测目录是否
- 双向顺序队列ArrayDeque和双向链式队列LinkedList,JDK已经包含,在此略。ArrayDeque包括顺序栈和顺序队列,Lin
- 云计算、大数据地快速发展催生了不少热门的应用及工具。作为老牌语言Java,其生态圈也出来了一些有关云服务、监控、文档分享方面的工具。本文总结
- 这篇文章将向大家展示Java编程利用socket多线程访问服务器文件代码示例,如果您想先了解Java多线程socket编程的基础知识,可以看
- Spring中提供了很多PostProcessor供开发者进行拓展,例如:BeanPostProcessor、BeanFactoryPost
- 今天学习到sql中的ResultSet,用到了获取总函数,网上百度说是使用getRow()方法,但是一值返回0.后台调试才发现getRow(
- 0-1背包的问题背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重