Ubuntu14.04下SVN服务器的安装配置


1、安装SVN

$ sudo apt-get install subversion

2、添加svn管理用户及subversion组

$sudo adduser svnuser
$sudo addgroup subversion
$sudo addgroup svnuser subversion
Show More

@ViewDebug.ExportedProperty的使用


使用@ViewDebug.ExportedProperty注解,我们可以在android提供的工具Monitor(或已经废弃的DDMS)中的Hierarchy Viewer中调试View的属性。我们可以直接观察View的某个变量或方法的值,实时观察View的状态变化。


ExprotedProperty注解源码

/**
 * This annotation can be used to mark fields and methods to be dumped by
 * the view server. Only non-void methods with no arguments can be annotated
 * by this annotation.
 */
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ExportedProperty {
    /**
     * When resolveId is true, and if the annotated field/method return value
     * is an int, the value is converted to an Android's resource name.
     *
     * @return true if the property's value must be transformed into an Android
     *         resource name, false otherwise
     */
    boolean resolveId() default false;
    /**
     * A mapping can be defined to map int values to specific strings. For
     * instance, View.getVisibility() returns 0, 4 or 8. However, these values
     * actually mean VISIBLE, INVISIBLE and GONE. A mapping can be used to see
     * these human readable values:
     *
     * <pre>
     * @ViewDebug.ExportedProperty(mapping = {
     *     @ViewDebug.IntToString(from = 0, to = "VISIBLE"),
     *     @ViewDebug.IntToString(from = 4, to = "INVISIBLE"),
     *     @ViewDebug.IntToString(from = 8, to = "GONE")
     * })
     * public int getVisibility() { ...
     * <pre>
     *
     * @return An array of int to String mappings
     *
     * @see android.view.ViewDebug.IntToString
     */
    IntToString[] mapping() default { };
    /**
     * A mapping can be defined to map array indices to specific strings.
     * A mapping can be used to see human readable values for the indices
     * of an array:
     *
     * <pre>
     * @ViewDebug.ExportedProperty(indexMapping = {
     *     @ViewDebug.IntToString(from = 0, to = "INVALID"),
     *     @ViewDebug.IntToString(from = 1, to = "FIRST"),
     *     @ViewDebug.IntToString(from = 2, to = "SECOND")
     * })
     * private int[] mElements;
     * <pre>
     *
     * @return An array of int to String mappings
     *
     * @see android.view.ViewDebug.IntToString
     * @see #mapping()
     */
    IntToString[] indexMapping() default { };
    /**
     * A flags mapping can be defined to map flags encoded in an integer to
     * specific strings. A mapping can be used to see human readable values
     * for the flags of an integer:
     *
     * <pre>
     * @ViewDebug.ExportedProperty(flagMapping = {
     *     @ViewDebug.FlagToString(mask = ENABLED_MASK, equals = ENABLED, name = "ENABLED"),
     *     @ViewDebug.FlagToString(mask = ENABLED_MASK, equals = DISABLED, name = "DISABLED"),
     * })
     * private int mFlags;
     * <pre>
     *
     * A specified String is output when the following is true:
     *
     * @return An array of int to String mappings
     */
    FlagToString[] flagMapping() default { };
    /**
     * When deep export is turned on, this property is not dumped. Instead, the
     * properties contained in this property are dumped. Each child property
     * is prefixed with the name of this property.
     *
     * @return true if the properties of this property should be dumped
     *
     * @see #prefix()
     */
    boolean deepExport() default false;
    /**
     * The prefix to use on child properties when deep export is enabled
     *
     * @return a prefix as a String
     *
     * @see #deepExport()
     */
    String prefix() default "";
    /**
     * Specifies the category the property falls into, such as measurement,
     * layout, drawing, etc.
     *
     * @return the category as String
     */
    String category() default "";
}
Show More

apt-get命令使用代理


全局代理

在Ubuntu系统(14.04)中里,使用代理有一种通用方式:系统设置 –> 网络 –> 网络代理 –> 应用到整个系统,这里设置的代理是全局代理,整个系统都会走这个代理设置。但一般我们不会这样使用,我们需要对我们指定的工具或软件设置代理。

APT代理

apt-get工具可以使用-o参数来使用配置字符串,或使用-c参数使用指定配置文件。

APT工具集使用的默认配置文件是/etc/apt/apt.conf,打开后发现文件默认是空文件。但是当我们设置了全局代理后,文件的内容变为:

Acquire::http::proxy "http://127.0.0.1:8087/";
Acquire::https::proxy "https://127.0.0.1:8087/";

因此我们知道了apt-get设置代理的方法:

Show More

git使用http/https代理

git使用http/https代理的方法如下:

打开命令行,设置如下环境变量:

$ export http_proxy=http://127.0.0.1:8087
$ export https_proxy=http://127.0.0.1:8087
Show More

使用GoAgent代理


一.关于GoAgent

GoAgent 是使用跨平台语言 Python 开发的代理软件,利用 Google App Engine 的服务器充当代理,帮助我们浏览一些被封锁或被过滤的内容。由于GFW等的封锁,很多的技术资料网站或某些资源网站都无法访问或访问困难。免费的GoAgent在这方面给予了很大的帮助。

Show More

Android:LayoutInflater分析

在Android中,我们使用LayoutInflater来解析布局xml文件并生成对应的View对象的继承树。LayoutInflater提供了两个常用的方法:

1. inflate(int resource, ViewGroup root);
2. inflate(int resource, ViewGroup root, boolean attachToRoot);

我们经常使用第一个函数来解析布局文件:

inflater.inflate(R.layout.my_layout, null);

但是,你可能没有意识到,这样使用常常是不恰当的,甚至是错误的,使用这种方法往往实现不了我们预期的显示效果。

Show More

Android消息机制

我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一个Message对象,然后借助Handler发送出去,之后在Handler的handleMessage()方法中获得刚才发送的Message对象,然后在这里进行UI操作就不会再出现崩溃了。

Show More

Git推送代码到多个远程仓库

github是使用最为广泛的git远程仓库管理平台,很多优秀的开源代码使用github进行托管。但是由于网络或地域的问题,不是每个人都能享受到它的便捷性。当你的代码托管到github,急需使用时却突然无法访问github,这将是致命的灾难。因此将代码托管到多个平台以做备份就很有必要了。中国目前也有许多git托管平台,包括开源中国社区代码托管CSDN代码托管平台等,可以为国内开发者提供代码托管服务。


添加多个仓库

打开github项目下的.git/config文件,在[remote “origin”]节点下增加新的url,这个url必需是先到对应的托管平台创建repository之后才有用。也可以创建新的remote节点,譬如[remote “all”],在新的节点下添加url。

Show More

Android View学习(四) -- Android自定义View的实现方法

自定义 View 的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。


一、自绘控件

自绘控件的意思就是,这个 View 上所展现的内容全部都是我们自己绘制出来的。绘制的代码是写在 onDraw() 方法中的,控件可以自己定义 View 的绘制方式。

下面我们准备来自定义一个计数器 View,这个 View 可以响应用户的点击事件,并自动记录一共点击了多少次。新建一个 CounterView 继承自 View,代码如下所示:

Show More

Android View学习(三)

基于 android 2.3.3_r1 代码研究

相信大家在平时使用 View 的时候都会发现它是有状态的,比如说有一个按钮,普通状态下是一种效果,但是当手指按下的时候就会变成另外一种效果,这样才会给人产生一种点击了按钮的感觉。当然了,这种效果相信几乎所有的 Android 程序员都知道该如何实现,但是我们既然是深入了解 View,那么自然也应该知道它背后的实现原理应该是什么样的,今天就让我们来一起探究一下吧。

Show More

—  我的个人空间 |   —