Android开发问题汇总(三)

1. How to define custom attributes?

A:Currently the best documentation is the source. You can take a look at it here(arrts.xml).

You can define attributes in the top <resources> element or inside of a <declare-styleable> element. If I’m going to use an attr in more than on place I put it in the root element. Note , all attributes share the same global namespace. That means that even if you create a new attribute inside of a <declare-styleable> element it can be used outside of it and you cannot create another attribute with the same name of a different type.

An <attr> element has two xml attributes name and format. name lets you call it something and this how you end up refering to it in code, e.g., R.attr.my_attribute. The format attribute can have different values depending on the type of attribute you want.

  • reference - if it references another resource id(e.g, “@color/my_color”, “@layout/my_layout”)
  • color
  • boolean
  • dimension
  • float
  • integer
  • string
  • fraction
  • enum - normally implicitly defined
  • flag - normally implicitly defined

You can set the format to multiple types by using |, e.g., format="reference|color".

enum attributes can be defined as follows:

1
2
3
4
<attr name="my_enum_attr"> 
    <enmu name="value1" value="1" />
    <enmu name="value2" value="2" />
</attr>

flag attributes are similar except the values need to defined so they can be bit ored together:

1
2
3
4
<attr name="my_flag_attr">
    <flag name="fuzzy" value="0x01" />
    <flag name="cold" value="0x02" />
</attr>
继续阅读

Android 真机抓包

在 Android 开发过程中,可能会遇到和服务端交互有问题的情况,这时候就得拿出证据来和服务端撕逼, 而最有力的证据自然是抓取的网络数据包;又或者是遇到很诡异的网络问题,这时候就可以借助抓包来分析和定位问题。

如果我们和服务端的交互没有通过 VPN, 而且也不是视频流这种网络性能要求苛刻的情况,我们可以通过 tPacketCapture 这种应用来抓包;

其他情况我们可以通过 root 手机,然后安装 tcpdump 来抓包。

下面我们详细介绍下 通过 tcpdump 抓包这种方法:

  • Root 手机

Root 手机的原理是利用系统存在的漏洞来获得 root 权限,XDA Developers 上有不少 root 工具,很多手机都可以用它们 root。

  • 安装 tcpdump

可以到网上搜索为 Android 编译好的 tcpdump 二进制包,例如这里就有一个。

1
2
3
4
5
6
7
8
9
10
11
// Copy tcpdump to device
$ adb -d push /path/to/tcpdump /sdcard/tcpdump

// Device shell
$ adb -d shell

// Switch to root
$ su

// Copy tcpdump to /data/local/
# cat /sdcard/tcpdump /data/local/tcpdump
继续阅读

如何搭建一个带 Dovecot 的 Postfix 邮件服务器

作为一个软件开发人员,我们可能需要一个自己的 VPS ,在上面可以跑我们的 side project,或者做一些实验。VPS 在运行过程中可能会遇到问题,这时我们可能希望在发生问题时能收到通知。使用邮件通知是个不错的方式,这样我们的服务挂掉了能及时处理,所以学会搭建邮件服务器还是很有价值。另外我一直觉得软件技术人员有个自己域名的邮箱很酷,所以我决定自己动手搭建一个邮件服务器。本文记录了如何搭建一个自己域名的邮件服务器,并让这个邮箱可以通过 Mac 和 iPhone 自由收发邮件(测试过 sina 和 QQ)。

邮件系统是怎么工作

开始之前我觉得有必要了解下邮件系统是怎么工作的,鸟哥在他的博文:第二十二章、郵件伺服器: Postfix作了很详细的介绍,建议熟读之后再开始。

准备材料

  • VPS
  • 域名

我服务器跑的是 CentOS 8。

继续阅读