Android之Log混淆

作为Android开发工程师,项目开发的过程中,日志的打印是必不可少的,通过这些日志我们可以很好分析程序运行的状况与正确性,可以使用的日志输出有哪种形式呢?发布release版本应该怎么屏蔽掉这些日志呢?

日志形式

  • Java形式
    1
    System.out.println(" log for test ");

这个一般不提倡使用

  • Android Log
    1
    Log.d(TAG, " log for test ");

这个是Android标准的日志输出类:android.util.Log

TAG定义

关于TAG的命名简单说一下,基本上有以下几种形式:

  • 人名
    1
    Log.d("gogh" " log for test ");

与代码无关,无法定位日志的位置

  • 类名
    1
    2
    private static final String TAG = LogUtils.class.getSimpleName();
    Log.d(TAG, " log for test ");

经过混淆的类,类名会改变为a、b这种形式,相应的TAG值也会改变,同样无法定位相关代码域。



解决Android Studio中Terminal无法输入的问题

问题描述:

1
Windows系统下Android Studio中的Terminal无法获取焦点,不能输入文字。

问题原因:

这个是因为系统升级造成的不兼容问题,在Windows环境开发的朋友们估计早早的就升级Win10了吧,UI非
常的炫酷。然而AS中的Terminal使用的还是Windows中的cmd控制台,也就是位于
C:\Windows\System32\目录下的cmd.exe。Win10下的cmd相对于早期版本的cmd做了一些改进,导
致了这里描述的问题。



Android之简单实现ButterKnife中的injectView的方案

首先说这里面用的知识点,注解、反射。

Android中findViewById(int resId)接受一个int的id参数,即通过资源id就可以找到对应的View。通过注解(annotation),我们可以资源id声明在对应的field上面,通过Java的反射,遍历每个field,找到对应的id,就可以初始化这个field(即view)。

1、注解声明

1
2
3
4
5
6
7
8
9
// 表示用在字段上
@Target(ElementType.FIELD)
// 表示在生命周期是运行时
@Retention(RetentionPolicy.RUNTIME)
//注解类,实现findViewById功能
public @interface FindView {
int findViewByResId() default 0;
}


本站访问量   |   您是第 位.