基本使用
1 | //读取xml |
创建XML
1 | public class CreateXML { |
输出的内容为
1 | <!--new.xml--> |
修改XML
1 | // 创建xml解析器对象reader |
字符串转XML
1 | String text = "<members> <member>sitinspring</member> </members>"; |
XML转字符串
1 | // 创建xml解析器对象reader |
本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站
乱码三千 – 码出一个新世界
1 | //读取xml |
1 | public class CreateXML { |
1 | <!--new.xml--> |
1 | // 创建xml解析器对象reader |
1 | String text = "<members> <member>sitinspring</member> </members>"; |
1 | // 创建xml解析器对象reader |
本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

公司有10个项目正在开发, 以后会陆陆续续增加新项目, 而这些项目都用到公共的一些类库, 如果你是技术负责人, 你会选择哪个方案?
方案一: 将公共类库依次拷贝至10个项目中 (不推荐 一旦类库需要修改, 你需要修改不只10遍)
方案二: 将公共类库封装成第三方框架, 放在公共仓库, 每个项目各自引入,(使用方便, 但是不方便修改源代码 不推荐)
方案三: 将公共类库源代码放在公有仓库, 每个项目下分别clone, ( 方便修改类库代码, 也方便同步修改,但是主工程项目会将类库代码并入主工程提交, 两个仓库独立性不够, 有时候我可能只想先pull没有类库的代码, 这个时候就不方便了)
为了增加公共类库与主项目的独立性, Git 给大家提供了子模块功能 允许你将一个 Git 仓库作为另一个 Git 仓库的子目录 , 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立
1 | git submodule add <仓库地址> <本地路径>//如果不指定本地路径 默认放在当前目录下 |
进入到子模块目录下, 指定分支:
1 | git checkout master //这里以master分支为例 |
然后
1 | git commit -am "修改类库" |
在父模块目录下执行以下命令:
1 | git submodule update --remote |
或者
直接进入到子模块目录下:
1 | git pull |
两者效果都是一样的
除此之外还可以使用以下指令对多个子模块进行批量更新:
1 | git submodule foreach --recursive git pull |
或者
1 | git pull --recurse-submodules |
注意:如果你的子模块内部也包含了一个子模块, 你可以使用:
1 | git submodule foreach git submodule update |
进行遍历更新
首先执行以下命令移除子模块引用:
1 | git submodule deinit <submodule_path> |
其中,<submodule_path> 是子模块的相对路径或URL。这将取消子模块的连接,并使其变回普通的目录。
执行以下命令来从 .gitmodules 文件中移除子模块的记录:
1 | git rm --cached <submodule_path> |
同样,<submodule_path> 是子模块的相对路径或 URL。该命令会将子模块的相关配置从Git仓库中移除。
执行以下命令删除子模块的相关目录和文件
1 | git rm <submodule_path> |
要将 Git 中的子模块移动到另一个目录,可以按照以下步骤进行操作:
进入包含子模块的 Git 仓库的根目录。
执行以下命令来修改子模块的路径:
1 | git mv <current_submodule_path> <new_submodule_path> |
其中,<current_submodule_path> 是当前子模块的路径,<new_submodule_path> 是你想要将子模块移动到的新路径。该命令会将子模块在 Git 仓库中的路径更改为新路径。
修改包含子模块的父项目中 .gitmodules 文件中子模块的路径记录。打开该文件,并将与子模块相关的路径修改为新的路径。
提交代码变更:
1 | git add .gitmodules |
更新子模块引用:
1 | git submodule sync --recursive |
这将使父项目更新其对子模块的引用,以适应新的路径。
执行以下命令来完成子模块路径的更新:
1 | git submodule update --init --recursive |
该命令会更新父项目中的子模块路径,并将子模块检出到新的目录中。
如果你的本地已经有了一个仓库,并希望将其设置为某个项目的子模块,而不重新下载该仓库,可以按照以下步骤操作:
在父项目的根目录下打开命令行工具。
使用 git submodule add 命令添加子模块,但是在这里我们指定本地路径作为子模块的位置而不是远程仓库的URL。例如:
1 | git submodule add /path/to/local/repo path/to/submodule |
将 /path/to/local/repo替换为你本地仓库的实际路径,path/to/submodule 替换为你希望子模块存放的相对路径(相对于父项目的根目录)。
接下来将子模块的引用地址改为远程仓库地址
进入父项目的根目录,在命令行工具中执行以下命令来修改子模块的引用地址:
1 | git submodule set-url <submodule_path> <remote_repository_url> |
其中 <submodule_path> 是子模块所在的路径(相对于父项目的根目录),<remote_repository_url>是子模块的远程仓库地址
注意: git submodule set-url是``Git 2.25以上版本才有的功能, 使用前需要先检查一下您当前的git版本
团队开发的时候, 进来一个新的成员, 他首次clone项目的时候, 并不会将子模块一并clone进来
这个时候, 需要先初始化子模块:
1 | # 用来初始化本地配置文件 |
或者直接:
1 | # clone 父仓库的时候加上 --recursive,会自动初始化并更新仓库中的每一个子模块 |
本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

在团队开发的时候, 经常会出现某次commit导致整个项目出现无法名状的错误, 这个时候, 最好的解决办法就是删除错误的commit
1.假设有2个提交记录
1 | commit def5adef853da4cc05752bdb36577c127be71ba5 |
2.现在需要回滚到上一次提交
那么 我们可以使用
1 | git reset --hard HEAD^ |
或者
1 | git reset --hard HEAD~1 |
或者
1 | git reset --hard f36801544670e00b2f59a28e19017d2786c4085e |
3.执行完后 查看日志,就会发现只剩下一个提交了
1 | git log |
4.如果这个时候,你突然发现回退版本错了,那么就用git reflog查看提交记录
1 | git reflog |
5.然后找出想要回退的版本,进行回退
1 | git reset --hard def5ade |
6.如果此时需要同步远程仓库, 需要使用强推
1 | git push -f |
因为我们本地库HEAD指向的版本比远程库的要旧
由此可见, git reset可以很方便的回滚到指定的历史commit,
但是它的劣势也很明显, 一旦回滚到指定commit, 那么后面提交的commit都会一并删除

*为了保留后面需要的的commit内容, 咱们可以使用另一种指令 *git revert
1.假设有3个提交记录
1 | commit def5adef853da4cc05752bdb36577c127be71ba5 |
2.现在我们不需要第二个commit的操作,也就是不需要 增加文件 这个操作
那么, 我们可以使用git revert -n +版本号 命令进行反做
1 | git revert -n 853dadef5adef4cc05752bdb36577c127be71ba5 |
注意: 这里可能会出现冲突,那么需要手动修改冲突的文件, 然后重新add提交
1 | git add . |
3.执行完后 查看日志,会发现原来的commit记录还在,同时新增了一个commit版本
1 | git log |
4.如果此时需要同步远程仓库
1 | git push |
使用git revert这种方式既可以清除指定的commit操作, 同时可以保留后面的commit
但是也存在一个让人不舒服的地方, 虽然操作被重写了,但是记录还在, 而且由新增了一个记录,感觉有些冗余

为了解决这个问题, 最后我选择了第三种方式, 也就是使用 git rebase 节点切片
1.假设有3个提交记录
1 | commit def5adef853da4cc05752bdb36577c127be71ba5 |
2.现在我们不需要第二个commit的操作,也就是不需要 增加文件 这个操作
假设是master分值那么, 我们可以使用git rebase --onto [startpoint] [endpoint]
1 | git rebase --onto master~853dade master~def5ade master |
或者
1 | git rebase --onto master~2 master~1 master |
或者使用
1 | git rebase i f368015 /把 需要改动那条 commit 前面的 pick 改成drop 然后, 保存退出即可 |
3.执行完后 查看日志 指定的commit已被切除
1 | git log |
4.如果此时需要同步远程仓库
1 | git push -f |
要注意的是,这样做会 彻底 删掉那条 commit。唯一的找回方式是通过 git reflog。
5.如果你只是想改下那条 commit 的 author
这样就行:
1 | git rebase -i f368015 |
把 需要改动那条 commit 前面的 pick 改成 edit
然后
1 | git commit --amend --author="xxxxxxxx" |
然后
1 | git rebase --continue |
最后保存退出即可
适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,彻底清除commit记录, 而又不增加新的commit记录, 就可以用这种方法
本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

点击注册.
注册地址:https://plugins.gradle.org/user/register


拷贝API Key到电脑$USER_HOME/.gradle/gradle.properties文件中,如果电脑没有该文件, 就自行创建一个
$USER_HOME 指的是你的电脑用户名
如果你嫌手动配置api麻烦, 可以使用官方的login task进行自动注册,

执行login task 执行窗口会出现授权链接 点击浏览器打开即可

在此之前需要先应用插件, 往下看:
在你自己的插件工程build.gradle中添加如下代码
1 | // 第一步 应用插件 |
配置完成后,执行 publishPlugins task即可自动上传代码
审核通过后,即可在官网搜索到你的插件, 上面附有插件的使用方法

本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站
有时候我们需要在不改变版本号的前提下 同步gradle重新从远程更新依赖包
方案一:
修改项目任意一个依赖库版本号,然后同步gradle,同步完成后再改回来
方案二:
执行以下指令强制刷新
1 | Windows: |

本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

当我们在进行maven打包时
1 | apply plugin: 'maven' |
如果工程在本地引用了第三方jar包, 那么直接使用uploadArchives指令是无法将第三方jar包打进去的
解决方案如下:
方案一: 将jar包源代码拷入工程,然后一并打包(不推荐 )
方案二: 只需加入以下代码
1 | task makeJar(type: Jar) { |
1 | // 源代码一起打包(不需要打包源代码的不要添加这几行) |
1 | //生成文档注释 |
1 | task makeJar(type: Jar) { |
然后执行makeJar指令

成功后,可以在build目录中找到合并后的jar包

本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站
在Textiew中可以通过设置TextView的属性
1 | android:maxEms |
和
1 | android:ellipseize |
来使过多的文字显示为省略号,但在在EditText中设置只这两个属性则不行,
android默认只有在文字不可编辑的状态下才可以显示这些效果,但是EditText重写了这个属性,使得文字默认都是可以编辑的。
所以若想要呈现TextView的效果,必须加上以下属性
1 | android:editable= "false" |
另外EditText不支持跑马等的效果.咱们来看看android源码
1 | override |
如果设置跑马灯效果,会直接抛出异常
那么有同学会说了,editable设为false, 那岂不是没法进行文本编辑了?
这里呢, 建议大家自定义EditText并重写onTouchEvent方法,从外部进行控制是否获取焦点, 如下:
1 | class FocusEditText(context: Context, attrs: AttributeSet) : EditText(context, attrs){ |
本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站
在项目的build.gradle中buildscript中添加如下脚本,使用最新版本号,在https://github.com/novoda/bintray-release查看:
buildscript {
repositories {
jcenter()
}
dependencies {
//classpath 'com.novoda:bintray-release:<latest-version>'
classpath 'com.novoda:bintray-release:0.8.1'
}
}在库模块(需要上传的模块)的build.gradle中添加:
apply plugin: 'com.novoda.bintray-release'
publish {
userOrg = '组织ID' //bintray账户下某个组织id 个人用户填写账户名
groupId = 'com.insworks.plugin' //maven仓库下库的包名,一般为模块包名
artifactId = 'framework-plugin' //项目名称
publishVersion = '1.0.2' //版本号
desc = '组件化架构插件' //项目介绍,可以不写
website = '' //项目主页,可以不写
}
tasks.withType(Javadoc) {//防止编码问题
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
options.addStringOption('charSet', 'UTF-8')
}在bintray中创建仓库并获取仓库key。Bintray网站点击右上角用户名–>Edit Your Profile -> API Key –>输入密码–>Submit–>Show。
使用指令上传代码:
在Android Studio的Terminal面板中执行下面命令,其中BINTRAY_USERNAME替换为你的binatray用户名,BINTRAY_KEY替换为上面获取的API Key,-PdryRun=false会上传到仓库中,如果为true,只会执行gradle任务,但不会上传。替换完成后回车执行
示例
gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
我的
gradlew clean build bintrayUpload -PbintrayUser=songjianziana -PbintrayKey=5e7f0ea95e85af4cceca20cb109fb50ad7cba6bc -PdryRun=false或者使用gradle快捷上传, 需要先编译项目(切记)

Android Studio中配置https://bintray.com仓库地址
maven { url 'https://dl.bintray.com/songjianzaina/insoan' }和然后在app模块build.gradle中添加依赖:
1 | implementation 'com.xxx.xxx.xx.:1.0.0' |
添加到JCenter。点击“Add to JCenter”,填写项目介绍,点击Send发送,然后等待审核,审核成功之后会发送站内通知

上传成功之后将maven { url 'https://dl.bintray.com/songjianzaina/insoan' }替换成jcenter即可
本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站
Android源码下载支持的系统目前只有Ubuntu和Mac OS两种操作系统, 本次以Ubuntu系统为例.
官方网站: http://source.android.com/source/downloading.html
下载单独项目的源码:https://github.com/android
下载Git(版本控制工具). 调出命令行: ctrl + alt + T
1 | sudo apt-get install git (下载地址在源中,"系统设置/软件和更新",路径:/etc/apt/sources.list) |
安装curl(上传和下载数据的工具).
1 | sudo apt-get install curl |
安装repo(一个基于git的版本库管理工具, 这里用于自动批量下载android整个项目.).
1 | // 创建目录 |
创建文件夹, 用于存放下载的Android源码.
1 | // 创建目录 |
初始化库.
1 | // 需要先配置git的用户信息 |
1 | repo initialized in /home/haha/android_source |
开始同步下载.
1 | repo sync |
注意: 下载过程中, 因为网络问题, 可能会中断下载. 当中断下载时, 继续使用repo sync命令继续下载.
本帖附件

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站