JungleTian's blog

Android Developer


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

JD-GUI 查看 jar 包的方法时,没有显示方法的 synchronized 关键字

发表于 2018-02-01 | 分类于 开发工具 |

话不多说直接上图:(代码是一毛一样)
JD-GUI:

阅读全文 »

Linux 常用命令

发表于 2018-01-03 | 分类于 技术文章 |

​ 本篇文章用于记录个人学习 Linux 时的比较,分享出来便于记忆和使用。

Linux 常用命令:

  • grep 是在内容里搜索,添加 | 代表扔到管道里面找
    阅读全文 »

Android 开发工作中常用快捷键

发表于 2017-12-15 | 分类于 技术文章 |

Android 开发常用 adb 命令

adb 命令 描述
adb logcat -v time > log.txt 打印 log 并保存到文件里
adb shell dumpsys activity top 查看最顶层 Activity 元素
adb shell dumpsys activity activities 查看栈内的信息 参数可选为 sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'
adb shell dumpsys activity grep -i run 查看正在运行的 Activity
adb shell pm clear <package_name> 清除应用缓存
adb shell am set-debug-app -w <package_name> 设置指定应用为 debug 模式
adb shell am start -S -W <package_name>/<package_name>.Activity 计算 Activity 启动耗时
adb shell am start -n yourpackagename/.activityname 新打开一个 activity
pidcat com.Qunar -t <tag_name> pidcat 查看指定进程的 TAG 的日志
adb shell screencap /sdcard/screenshot.png 截屏
adb pull /sdcard/screenshot.png ./ 拉取文件
adb shell rm /sdcard/screenshot.png 删除文件
adb shell am force-stop <PACKAGE> 强制杀死进程
adb shell am kill [options] <PACKAGE> 杀死进程以及关联后台进程
./gradlew assembleDebug –daemon –parallel 开启 daemon 进程加快编译速度
阅读全文 »

Git 使用之常用快捷键

发表于 2017-11-30 | 分类于 技术文章 |

Git 使用的常用快捷键

上篇文章给大家分享了重写历史记录的文章之后,有热爱和喜欢学习 Git 的小伙伴咨询相关问题,也解决了部分问题,介于很多小伙伴对 Git 的关注和使用,因此分享一篇这篇文章
阅读全文 »

Git 使用之重写历史记录

发表于 2017-11-16 | 分类于 技术文章 |
Git 是免费开源的分布式版本控制系统,主要工作就是确保永远不会丢失已经提交的记录,但是 Git 的设计初衷也是为了让我们掌控开发的工作流程和规范,如 `[adr]fix: resolve NPE at ...` 方便以后查看历史提交记录。然而开发过程中难免会遇到提交信息错误或不符合规范的情况,下面将直奔主题介绍一下如何修改 git 的提交历史记录。
阅读全文 »

2016年,成长的一年。

发表于 2016-12-30 | 分类于 年终总结 |
1
2
3
4
5
6
7
8
9
10
11
慌慌张张 匆匆忙忙
为何生活总是这样
难道说我的理想
就是这样度过一生的时光
不卑不亢 不慌不忙
也许生活应该这样
难道说六十岁以后
再去寻找我想要的自由
我不想这样活着
我不想这样活着
我不想这样活着...
阅读全文 »

写在2015年

发表于 2015-12-31 | 分类于 年终总结 |

从2013年毕业到现在,发生在我身上的事情历历在目,认识了很多人,接触了很多事,纵然发现世界之大,各行各业中,每个人都有自己的梦想,并且为了自己的梦想付之行动(当然也包括我,233)。

我说这段开头可能概括的比较多,也许你会说,你还没有什么丰功伟业,没有资格对整个世界或社会品头论足。但是我的这些想法和见地,能对我自己和与我有共识的人得到一下感悟就知足了,希望得到共勉。

我是90年生人,属于90后的第一批。“90后”被大家定位一个标签,代表了有个人想法、特立独行的一代人,很多前辈们给予厚望,因此90后的标签挂在我身上,我觉得我很骄傲,很自豪。但不知从何开始,又划分出个95后~ 顿时感觉自己已经老了。看着娱乐圈出道的年轻人,大学生时期便成为明星,高中生、初中生甚至小学生都已经成为社会上的热门话题。是的,他们已经开始赚钱,而且薪酬不比成年人低。为此我们这些“老人”该如何应对?我的答案就是:走好自己的路,虚心学习,让自己更强!

阅读全文 »

如何正确地写出单例模式

发表于 2015-12-20 | 分类于 技术文章 |

静态内部类 static nested class
我比较倾向于使用静态内部类的方法,这种方法也是《Effective Java》上所推荐的。也是不用考虑双判断的,但是牺牲了空间。很多时候,大多数人不会想到这种方法。

1
2
3
4
5
6
7
8
9
public class Singleton {  
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
阅读全文 »

使用Vector标签绘制图片

发表于 2015-12-09 | 分类于 技术文章 |

下面介绍一下 Android 5.0 官方推出了一个全新的标签 vector –> 官网地址

创建矢量图片

在 Android 5.0(API 级别 21)及更高版本中,您可定义矢量图片,而且图片可在不丢失定义的情况下缩放。您只需一个资产文件即可创建一个矢量图像,而位图图像则需要为每个屏幕密度提供一个资产文件。如果要创建一个矢量图像,请您在 XML 元素中定义形状的详情。

下列示例以心形定义一个矢量图像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- res/drawable/heart.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
<!-- intrinsic size of the drawable -->
android:height="256dp"
android:width="256dp"
<!-- size of the virtual canvas -->
android:viewportWidth="32"
android:viewportHeight="32">

<!-- draw a path -->
<path android:fillColor="#8fff"
android:pathData="M20.5,9.5
c-1.955,0,-3.83,1.268,-4.5,3
c-0.67,-1.732,-2.547,-3,-4.5,-3
C8.957,9.5,7,11.432,7,14
c0,3.53,3.793,6.257,9,11.5
c5.207,-5.242,9,-7.97,9,-11.5
C25,11.432,23.043,9.5,20.5,9.5z" />
</vector>

矢量图像在 Android 中以 VectorDrawable 对象表示。如果要了解更多有关 pathData 语法的信息,请参阅 SVG 路径参考文档。如果要了解更多有关为矢量图片属性添加动画的信息,请参阅为矢量图片添加动画

阅读全文 »

自己动手写一个插件

发表于 2015-12-06 | 分类于 技术文章 |

如何自己写一个 gradle 插件

看谷歌的插件:com.android.application 和 com.android.databinding:

1
2
apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'

他们都是一个 groovy 项目,那么接下来让我们来看看如何自己手动写一个插件:

创建一个普通的 groovy 工程(java 工程也没有关系),创建 src/main/groovy 目录,编写下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
package com.example.wecar.plugin
import org.gradle.api.Plugin
import org.gradle.api.internal.project.ProjectInternal

class GreetingPlugin implements Plugin<ProjectInternal> {

void apply(ProjectInternal project) {
project.task('hello') << {
println 'hello'
}
}
}
阅读全文 »
12
ZhangTitanjum

ZhangTitanjum

Nobody can go back and start a new begining, but anyone can start today and make a new ending.

14 日志
3 分类
12 标签
GitHub Twitter Weibo Instagram
© 2018 ZhangTitanjum
由 Hexo 强力驱动
主题 - NexT.Pisces