CN106776231B - 基于Git的Android崩溃日志优化方法及*** - Google Patents
基于Git的Android崩溃日志优化方法及*** Download PDFInfo
- Publication number
- CN106776231B CN106776231B CN201710013080.8A CN201710013080A CN106776231B CN 106776231 B CN106776231 B CN 106776231B CN 201710013080 A CN201710013080 A CN 201710013080A CN 106776231 B CN106776231 B CN 106776231B
- Authority
- CN
- China
- Prior art keywords
- git
- sha
- value
- android
- sha value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Git的Android崩溃日志优化方法及***,其中包括以下步骤:通过Android项目的自动化构建工具Gradle运行编译脚本;取当前编译的代码所在的目录;判断当前目录是否存在Git;若存在,则获取该Git的SHA值,该SHA值对应一个提交版本ID;判断SHA值是否为空,若否,则将SHA值转换成Android***可识别的代码;当Android***运行出现异常时,进行日志收集,并加入经过代码转换的SHA值;将收集的日志上传给服务器。本发明可快速定位出问题的代码是哪一次提交的,极大地减少了因为找不到出问题的版本而浪费的时间。
Description
技术领域
本发明涉及Android开发领域,尤其涉及一种基于Git的Android崩溃日志优化方法及***。
背景技术
在当前Android应用快速更新的时代,对于Android开发来说,在极短的时间里发布很多次版本的应用给用户是平常的事情。但是如果用户反馈Android应用在使用时出现崩溃的情况,而程序员发现在已经发出了很多版本才出现该问题,无法判断该问题是由哪一个版本的代码提交引起的。此时如果要修改此错误就需要查看所有已经提交的版本。这样查下去既浪费时间,又极大的降低了工作效率。如果有一种方案可以让程序员在查询问题时可以快速定位到哪一次提交代码,那么对于定位问题的时间及修改问题所需要的时间都将极大的节省。
发明内容
本发明要解决的技术问题在于针对现有技术中Android应用在使用时出现崩溃的情况下,不容易找到是哪个版本出现问题的缺陷,提供一种可以快速定位到哪一次提交代码出现问题的基于Git的Android崩溃日志优化方法及***。
本发明解决其技术问题所采用的技术方案是:
提供一种基于Git的Android崩溃日志优化方法,包括以下步骤:
通过Android项目的自动化构建工具Gradle运行编译脚本;
获取当前编译的代码所在的目录;
判断当前目录是否存在Git;
若存在,则获取该Git的SHA值;
判断SHA值是否为空,若否,则将SHA值转换成Android***可识别的代码;
当Android***运行出现异常时,进行日志收集,并加入经过代码转换的SHA值;
将收集的日志上传给服务器。
本发明所述的方法中,若SHA值为空,则将SHA值变为预设值。
本发明所述的方法中,所述预设值为-1。
本发明所述的方法中,具体使用Android***自带的异常捕获控制器进行日志收集。
本发明所述的方法中,若SHA值不为空,则将SHA值转换成Android***可识别的java代码。
本发明还提供了一种基于Git的Android崩溃日志优化***,包括:
编译脚本运行模块,用于通过Android项目的自动化构建工具Gradle运行编译脚本;
目录获取模块,用于获取当前编译的代码所在的目录;
Git判断模块,用于判断当前目录是否存在Git;
SHA值获取模块,用于在当前目录存在Git时,获取该Git的SHA值;
SHA值判断模块,用于判断SHA值是否为空;
代码转换模块,用于在SHA值不为空时,将SHA值转换成Android***可识别的代码;
日志收集模块,用于当Android***运行出现异常时,进行日志收集,并加入经过代码转换的SHA值;
日志上传模块,用于将收集的日志上传给服务器。
本发明所述的***中,该***还包括赋值模块,用于在SHA值为空时,将SHA值变为预设值。
本发明所述的***中,该***还包括赋值模块,用于在SHA值为空时,将SHA值变为-1。
本发明所述的***中,所述日志收集模块具体使用Android***自带的异常捕获控制器进行日志收集。
本发明所述的***中,所述日志收集模块在SHA值不为空时,将SHA值转换成Android***可识别的java代码。
本发明产生的有益效果是:本发明使用Git工具来实现快速定位出问题的代码是哪一次提交的,极大地减少了因为找不到出问题的版本而导致过多的时间放在问题的查找上面。同时可以优化出现崩溃时日志返回的信息,提高程序员查找及修改问题的效率,节省问题查找修改时间。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例基于Git的Android崩溃日志优化方法的流程图;
图2是本发明另一实施例基于Git的Android崩溃日志优化方法的流程图;
图3是本发明实施例基于Git的Android崩溃日志优化***的结构示意图;
图4是本发明另一实施例基于Git的Android崩溃日志优化***的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
对本发明涉及的名词进行解释:
GIT:分布式版本控制***。是一款免费、开源的分布式版本控制***,用于敏捷高效地处理任何或小或大的项目。
SHA:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature AlgorithmDSA)。在Git中,每个commit ID的信息就是一个SHA Hash值,它是对那个commit是Git仓库中内容和头信息(Header)的一个校验和(checksum)。
GRADLE:一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
在Android开发中,越来越多会用到Gradle来作为Android项目的自动化建构工具。其好处是可以自定义构建过程中的参数。本发明中就是需要在使用Gradle进行编译时将git版本参数加入。并在返回日志时,将本参数加到返回日志中,方便程序员快速定位问题所在提交日志。
本发明中,首先会在编译文件时,从编译文件中获取当前编译文件的Git的SHA值。该值使用git命令获取。由于编译Android代码时,可以获取到Android代码的具***置,而Git的版本信息只要是知道具体的代码文件位置就可以获取,因此只需要获取当前需要编译的代码文件所在,获取方法使用当前编译的***自带的git命令工具来实现。
本发明的一个实施例中,如图1所示,基于Git的Android崩溃日志优化方法包括以下步骤:
S1、通过Android项目的自动化构建工具Gradle运行编译脚本;
S2、获取当前编译的代码所在的目录;
S3、判断当前目录是否存在Git;
S4、若存在,则获取该Git的SHA值;
S5、判断SHA值是否为空,若否,则转至S6;
S6、将SHA值转换成Android***可识别的代码;
S7、当Android***运行出现异常时,进行日志收集,并加入经过代码转换的SHA值;
S8、将收集的日志上传给服务器。
本发明的一个实施例中,若SHA值为空,则将SHA值变为预设值。该预设值可设为-1。若SHA值不为空,则将SHA值转换成Android***可识别的java代码。
进行日志收集时,具体可使用Android***自带的异常捕获控制器进行日志收集,如具体使用UncaughtExceptionHandler这个类来实现。
本发明另一个较佳实施例中,如图2所示,具体得到Git的SHA流程图如图2所示:
1.开始编译脚本
在本发明中,gradle开始运行脚本编译的Android代码,该编译脚本使用的是Android官方推荐的gradle来进行编写,本发明中不做过多阐述。
2.获取到当前编译所在的目录
由于需要获取到当前编译的android代码的git信息,因此首先需要取得当前编译的Android代码所在的代码文件目录,由于在android开发中,约定的gradle脚本就在Android代码所在目录的上级,因此只需要获取当前目录下即可。
3.判断当前目录是否存在git
由于某些项目在开发过程中没有使用git工具,因此需要在取得git的SHA值之前要检测当前项目是否使用git,检测方法是根据使用在android所在目录中执行命令“gitlog”来得到返回字符串,并根据返回的字符串来判断当前项目是否使用git。
执行命令使用如下代码来是实现,该命令同样也是在gradle脚本文件中,并在执行编译时运行:
def isusegit='git log'.execute([],project.rootDir).text.trim()
当在没有使用git工具的项目中执行上述命令时,***会返回如下字符串:
fatal:Not a git repository(or any of the parent directories):.git
该字符串代表本目录没有使用git,而使用过git的则返回的是每次提交的日志,因此可以通过返回字符串的特征值来判断是否使用了git,在本发明中该特征值为“fatal:Not a git”也就是没有使用git返回的字符串的前面一段,如果返回的字符串的包含该字符串,则断定为项目没有使用git,反之则使用了。
4.获取git的SHA值
如果判断成功则会开始获取git的SHA值,如果判断不存在git,则返回空。
在gradle的编译脚本中加入如下代码来获取git的SHA值:
def gitSha='git rev-parse--short HEAD'.execute([],project.rootDir).text.trim()//获取当前编译项目的SHA值
当gralde编译时会运行上述代码,并得到当前正在编译中的代码所在git的SHA值,拿到这个值后,我们需要将该值在编译时传递给Android代码中去。
5.判断SHA是否为空
这里需要判断该获取的SHA值是否为空,这里为空有两种可能。第一,该项目没有使用git,因此在获取时返回的空;第二,该项目在获取git的SHA时获取不到SHA的值,因此返回为空。
当SHA的值为空时,在gradle的脚本中将该值置为-1,如果不为空,并准备将其变为Android可识别的java代码。
6.将SHA变为Android可以识别的java代码
将SHA变为Android可识别的java代码就是在gradle的编译脚本中加上编译配置文件的一个字段,该字段通过设置字段的属性,数值后可在编译过程中可以生产java代码,由于Android代码可以直接调用java代码,因此Android在编译时可以直接使用该编译过程中生产的java代码来获取git中的SHA值。
在gradle编译脚本中加入如下语句来实现上述操作:
buildConfigField"String","GIT_SHA","\"${gitSha}\""
该语句中,将之前获取的git的SHA数值在编译过程中变成GIT_SHA=”gitsha”这种形式的java语句,其中的gitsha则替换为之前已经得到的git的SHA数值。变成这样后,将在Android代码编译过程中,将可以直接把该值作为参数来使用。
在gradle进行编译时,会将设置的该参数进行编译,变成成一个Android可识别的Java文件,名为:BuildConfig。在该文件中会有脚本中设定的buildConfigField这个属性。本发明中该属性的类型为String,名字为GIT_SHA,值则是获取到的git的SHA值。
7.Android可识别该值
Android代码中如果需要使用该值,只需要在Android代码中使用BuildConfig.GIT_SHA则可以得到该参数。
8.上报日志中加入获取的SHA的值
此时git的SHA值在Android代码中已经获取到了,本发明中需要在程序出现错误的时候同时将该数值与错误信息一并上报给服务器,这里就需要对Android工程的异常问题进行一些处理,使得可以上传git的SHA数值。
本发明中使用Android自带的异常捕获控制器来处理该操作,具体使用UncaughtExceptionHandler这个类来实现,该类是Android自带的异常捕获工具,
如果程序出现了未捕获异常默认情况下则会出现强行关闭对话框实现该接口并注册为程序中的默认未捕获异常处理这样当未捕获异常发生时,就可以做些异常处理操作例如:收集异常信息,发送错误报告等。在代码中使用该类后将可以自定义返回的错误信息,增加开发人员查找问题,解决问题的效率。使用该类后,将会在应用出现问题的时候首先收集应用的错误信息,然后将之前得到的git的SHA值一并通过该类返回给应用的日志收集服务器,服务器在接收到错误信息后将交由开发人员处理,开发人员拿到该SHA值后,通过git reset sha的命令将代码回滚到出问题的地方,可以方便的判断出问题出现在哪一次提交的代码,具体服务器接收错误后的操作不在本专利说明中,故在此不做过多陈述。
本发明实施例基于Git的Android崩溃日志优化***,如图3所示,包括:
编译脚本运行模块,用于通过Android项目的自动化构建工具Gradle运行编译脚本;
目录获取模块,用于获取当前编译的代码所在的目录;
Git判断模块,用于判断当前目录是否存在Git;
SHA值获取模块,用于在当前目录存在Git时,获取该Git的SHA值;
SHA值判断模块,用于判断SHA值是否为空;
代码转换模块,用于在SHA值不为空时,将SHA值转换成Android***可识别的代码;
日志收集模块,用于当Android***运行出现异常时,进行日志收集,并加入经过代码转换的SHA值;
日志上传模块,用于将收集的日志上传给服务器。
进一步地,如图4所示,该***还包括赋值模块,用于在SHA值为空时,将SHA值变为预设值。
该***还包括赋值模块,用于在SHA值为空时,将SHA值变为-1。
日志收集模块具体使用Android***自带的异常捕获控制器进行日志收集。
日志收集模块在SHA值不为空时,将SHA值转换成Android***可识别的java代码。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (10)
1.一种基于Git的Android崩溃日志优化方法,其特征在于,包括以下步骤:
通过Android项目的自动化构建工具Gradle运行编译脚本;
获取当前编译的代码所在的目录;
判断当前目录是否存在Git;
若存在,则获取该Git的SHA值,该SHA值对应一个提交版本ID;
判断SHA值是否为空,若否,则将SHA值转换成Android***可识别的代码;
当Android***运行出现异常时,进行日志收集,并加入经过代码转换的SHA值;
将收集的日志上传给服务器。
2.根据权利要求1所述的方法,其特征在于,若SHA值为空,则将SHA值变为预设值。
3.根据权利要求2所述的方法,其特征在于,所述预设值为-1。
4.根据权利要求1所述的方法,其特征在于,具体使用Android***自带的异常捕获控制器进行日志收集。
5.根据权利要求4所述的方法,其特征在于,若SHA值不为空,则将SHA值转换成Android***可识别的java代码。
6.一种基于Git的Android崩溃日志优化***,其特征在于,包括:
编译脚本运行模块,用于通过Android项目的自动化构建工具Gradle运行编译脚本;
目录获取模块,用于获取当前编译的代码所在的目录;
Git判断模块,用于判断当前目录是否存在Git;
SHA值获取模块,用于在当前目录存在Git时,获取该Git的SHA值;
SHA值判断模块,用于判断SHA值是否为空;
代码转换模块,用于在SHA值不为空时,将SHA值转换成Android***可识别的代码;
日志收集模块,用于当Android***运行出现异常时,进行日志收集,并加入经过代码转换的SHA值;
日志上传模块,用于将收集的日志上传给服务器。
7.根据权利要求6所述的***,其特征在于,该***还包括赋值模块,用于在SHA值为空时,将SHA值变为预设值。
8.根据权利要求6所述的***,其特征在于,该***还包括赋值模块,用于在SHA值为空时,将SHA值变为-1。
9.根据权利要求6所述的***,其特征在于,所述日志收集模块具体使用Android***自带的异常捕获控制器进行日志收集。
10.根据权利要求9所述的***,其特征在于,所述日志收集模块在SHA值不为空时,将SHA值转换成Android***可识别的java代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710013080.8A CN106776231B (zh) | 2017-01-09 | 2017-01-09 | 基于Git的Android崩溃日志优化方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710013080.8A CN106776231B (zh) | 2017-01-09 | 2017-01-09 | 基于Git的Android崩溃日志优化方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106776231A CN106776231A (zh) | 2017-05-31 |
CN106776231B true CN106776231B (zh) | 2019-11-15 |
Family
ID=58951224
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710013080.8A Active CN106776231B (zh) | 2017-01-09 | 2017-01-09 | 基于Git的Android崩溃日志优化方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106776231B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109992293B (zh) * | 2018-01-02 | 2023-06-20 | 深圳市宇通联发科技有限公司 | Android***组件版本信息的组装方法及装置 |
CN109388567B (zh) * | 2018-09-28 | 2023-09-08 | 深圳市昊云智慧技术有限公司 | 代码处理方法、装置及介质 |
CN109753419A (zh) * | 2018-12-29 | 2019-05-14 | 苏州思必驰信息科技有限公司 | 一种非侵入式监控android***的所有应用的异常日志信息的方法及装置 |
CN109828781B (zh) * | 2018-12-29 | 2022-06-07 | 天津字节跳动科技有限公司 | 用于问题排查的源码版本定位方法、装置、介质和设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103401934A (zh) * | 2013-08-06 | 2013-11-20 | 广州唯品会信息科技有限公司 | 获取日志数据的方法和*** |
CN105373388A (zh) * | 2015-11-30 | 2016-03-02 | 西安闻泰电子科技有限公司 | 自动上传patch修改的代码管理方法 |
CN105573900A (zh) * | 2015-12-17 | 2016-05-11 | 南京亚派科技股份有限公司 | 一种***日志配置和记录方法 |
CN105933268A (zh) * | 2015-11-27 | 2016-09-07 | ***股份有限公司 | 一种基于全量访问日志分析的网站后门检测方法及装置 |
CN106155751A (zh) * | 2016-08-02 | 2016-11-23 | 传线网络科技(上海)有限公司 | 应用打包发布方法及装置 |
CN106293749A (zh) * | 2016-08-15 | 2017-01-04 | 云南电网有限责任公司信息中心 | 一种基于持续集成的源代码管控*** |
-
2017
- 2017-01-09 CN CN201710013080.8A patent/CN106776231B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103401934A (zh) * | 2013-08-06 | 2013-11-20 | 广州唯品会信息科技有限公司 | 获取日志数据的方法和*** |
CN105933268A (zh) * | 2015-11-27 | 2016-09-07 | ***股份有限公司 | 一种基于全量访问日志分析的网站后门检测方法及装置 |
CN105373388A (zh) * | 2015-11-30 | 2016-03-02 | 西安闻泰电子科技有限公司 | 自动上传patch修改的代码管理方法 |
CN105573900A (zh) * | 2015-12-17 | 2016-05-11 | 南京亚派科技股份有限公司 | 一种***日志配置和记录方法 |
CN106155751A (zh) * | 2016-08-02 | 2016-11-23 | 传线网络科技(上海)有限公司 | 应用打包发布方法及装置 |
CN106293749A (zh) * | 2016-08-15 | 2017-01-04 | 云南电网有限责任公司信息中心 | 一种基于持续集成的源代码管控*** |
Also Published As
Publication number | Publication date |
---|---|
CN106776231A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106776231B (zh) | 基于Git的Android崩溃日志优化方法及*** | |
US8091071B2 (en) | Method and system for template-based code generation | |
CN106843840B (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
US9250864B2 (en) | Relationship management for data modeling in an integrated development environment | |
CN1526104B (zh) | 分析结构化数据 | |
US9405518B2 (en) | Leveraging legacy applications for use with modern applications | |
CN102841841A (zh) | 一种测试中的断言处理方法及*** | |
CN109284106A (zh) | 业务规则的发布管理方法、电子装置及可读存储介质 | |
CN102880493B (zh) | 一种构件间动态依赖关系的自动分析方法 | |
CN109582391B (zh) | 一种基于xml的设备树配置方法 | |
CN116069325A (zh) | 前端项目构建方法、装置、设备及计算机可读存储介质 | |
CN110851514B (zh) | 基于flink的etl处理方法 | |
CN111580821B (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
Barros et al. | Editing support for software languages: implementation practices in language server protocols | |
CN110058849A (zh) | 流程图的生成方法、装置、计算机设备以及存储介质 | |
US8136094B2 (en) | Relationship management for data modeling in an integrated development environment | |
CN104899042A (zh) | 一种嵌入式机器视觉检测程序开发方法及*** | |
CN106610898B (zh) | 一种基于JPF的Java代码SSA单路径的生成方法 | |
JP5041990B2 (ja) | ソフトウェア部品抽出支援装置 | |
CN111562907A (zh) | 自定义接口数据的转换方法与*** | |
CN113360156A (zh) | 一种ios编译方法及相关设备 | |
CN111240681A (zh) | 一种不同编程语言的转换方法及装置 | |
CN116450246A (zh) | 一种基于状态机的事件流转可配置方法 | |
CN114816364A (zh) | 基于Swagger动态生成范本文件的方法、装置及应用 | |
US11327994B2 (en) | Arranging converted operation history information |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |