自编写程序作为android系统app的编译记录

本blog记录了把自己编译的软件当做系统的app随着android的编译而加入到系统。 主要还是编写Android.mk 的问题,还有资源存放问题,这点系统编译比sdk编译要严格。 ##关于资源 有些人喜欢在xml里面写硬编码,例如android:text="hello world",这些在系统编译的时候一定会报错的,为了养成良好的习惯,方便以后做国际化,字符串应该放到strings.xml里面,而诸如style,color,甚至常用的数字常量都应该放入相应的文件夹。 虽然能够编译了,可能还会发生资源找不到的错误。大多是因为图片资源乱放的原因,例如 drawable drawable-ldpi drawable-mdpi drawable-hdpi 这几个常用的文件夹,android的图片加载策略是先看屏幕密度究竟是ldpi还是mdpi,又或者是hdpi,然后在该文件夹下找图片资源,找不到的话,再到drawable里面找图片资源,再找不到的话就报错,它不会遍历所有文件夹来寻找图片的,这就要求我们图片要方正确了,要兼容好的话最好每个文件夹都放上对应分辨率的图片。 ##Android.mk 系统编译脚本可以参考其他的系统应用程序,例如Setting。其中有一个注意的地方是如果引用了第三方的包,可以使用BUILD_MULTI_PREBUILT来把包引进编译流程,下面就是一个例子,其中还有aidl的参考编译方法。 还有一点就是如果需要系统权限,加上LOCAL_CERTIFICATE := platform。 :::java LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := \ android-common \ guava \ android-support-v13 \ android-support-v4 \ android-log4jlib \ jcifslib \ LOCAL_SRC_FILES := \ $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := package-test #LOCAL_PROGUARD_FLAG_FILES := proguard.flags LOCAL_CERTIFICATE := platform include $(BUILD_PACKAGE) include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := android-log4jlib:libs/android-logging-log4j-1.0.3.jar \ jcifslib:libs/jcifs-krb5-1.3.17.jar \ include $(BUILD_MULTI_PREBUILT) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := src/com/xx/xx.aidl LOCAL_MODULE := com.xx.aidl include $(BUILD_STATIC_JAVA_LIBRARY) ##最后 ...

April 24, 2013

运行sudo出现command not found

在使用ubuntu时发现一些奇怪的现象,明明定义了PATH,而且普通用户也可以调用,sudo却调用不了,报command not found的错误。 google之后知道是编译sudo的时候加入了–with-secure-path,这个选项。 –with-secure-path[=PATH] Path used for every command run from sudo(8). If you don’t trust the people running sudo to have a sane PATH environment variable you may want to use this. Another use is if you want to have the “root path” be separate from the “user path.” You will need to customize the path for your site. NOTE: this is not applied to users in the group specified by –with-exemptgroup. If you do not specify a path, "/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc" is used. ...

April 24, 2013

ubuntu简单安装bcompare

介绍一个简单在ubuntu上安装beyond compare的方法 最新的bcompare 不是3.3.5 ,但是懒得找新版本的序列号,所以就下这个版本了。 下面是下载的64位 3.3.5 版本的bcompare :::sh wget http://www.scootersoftware.com/bcompare-3.3.5.15075_amd64.deb 双击运行即可,可能需要下载依赖库,所以安装时间稍长 附送cd-key :::sh HmB5oANygQOhaStTHNa+zOKgOeWHOkeAp6d1+QwIebz6z9kwYCm9-O0jF9F79zvzed9v5UVC4VrDkDMmTM8nB+ 完毕

April 23, 2013

第六章:多文件操作

##概念 vim可以同时操作多个文件,缓存列表让我们知道我们打开了什么文件。vim允许我们在同一个窗口中同时查看两个文件,或者以tab的形式来操作文件。我们需要知道如何利用好它。 ##用缓存列表跟踪打开的文件 我们可以在一个vim中打开多个文件,vim允许我们使用缓存列表来管理这些打开的文件 文件和缓存之间的关系 像其他编辑器一样,我们可以使用vim来读文件,编辑文件和存储文件。我们可能以为我们编辑的是文件本身,其实我们是在编辑vim在内存中的缓存,这个就是vim术语上的缓存。而文件是存储在硬盘上的。当我们用vim打开一个文件,文件里的内容会读入内存中,开始的时候,缓存和本地磁盘中的文件内容是一样的,但是随着我们的编辑,缓存中的内容就会和磁盘的内容有所不同。当我们想保存修改时,我们需要输入命令来把缓存中的文件写入磁盘,命令为:write或者是:w。 在打开多个文件后,我们可以使用:ls来查看我们究竟打开了哪些文件, 我们可以看到#和%,其中%表示正在屏幕显示的文件,#表示当你按下<C-^>时可以切换到的文件,+表示该文件已被修改,但是还没有被存储,也就是缓存和磁盘的文件不一样。 :bnext,这个命令是跳转到下一个缓存,也就是跳到下一个已打开的文件。 :bprev,跳到上一个已打开的文件 :bdelete N1 N2或者**:bd**,可以删除指定序号的缓存。 :w[rite],保存文件 :e[dit]!,重置文件 :qa[ll]!,不保存退出 :wa[ll],保存所有打开的文件 ##同屏显示多文件 之前说过vim可以在同一个屏幕显示多个文件,如何做到的,很简单,通过下面的命令就可以了。 命令 影响 <C-w>s 分裂本文件 <C-w>v 纵向分裂本文件 :sp[lit] {file} 分裂打开指定文件 :vsp[lit] {file} 纵向分裂打开指定文件 <C-w>w 在同屏文件件转移 <C-w>h 向左转移 <C-w>j 向下转移 <C-w>k 向上转移 <C-w>l 向下转移 :on[ly] <C-w>o 只保留本窗口 <C-w>= 等分所有窗口 <C-w>_ 最大化本地高度 <C-w> [N]<C-w>_ 设置高度为N [N]<C-w>

April 22, 2013

第五章:命令行模式

##一个笑话 有人说,想快速生成一串无序字符串,就让新手来关闭vim吧,-_-!!!。 的确,在一开始接触vim的时候我也不会关闭,只是简单地按叉叉了事,可是第二次打开该文本,却有提示,很是不爽。一切都只能怪自己无知了。 那么究竟如何才是正确的关闭vim呢?这个问题涉及到这篇文章要讨论的vim另一个经常要用到的模式–命令行模式。进命令行模式的方法是在普通模式下按:,没错,是冒号。你会看到光标跳到最下面,这就对了。 除了按冒号,还记得之前的用vim做计算机吗?在编辑模式按<C-r>=,还有就是普通模式按下/也算是特殊的命令行模式了,这个主要用来搜索文本用的。 在冒号下的命令行模式我们可以做什么吗?答案是我们可以做很多事情,你会发现这又是vim强大的另一个原因。现在我们看看下面这个表 命令 效果 :[range]delete [x] 删除指定的行 [放到寄存器x中] :[range]yank [x] 复制指定的行 [放到寄存器x中] :[line]put [x] 把寄存器x的内容放到指定的行后面 :[range]copy {address} 复制特定行到指定的地址 :[range]move {address} 移动特定的行到指定的地址后 :[range]join 合并特定的行 :[range]normal {commands} 在特定的行运行命令 :[range]substitute/{pattern}/{string}/[flags] 把指定行的pattern替换为string :[range]global/{pattern}/[cmd] 匹配pattern的行运行命令 可能你会有疑问,range是什么,address是什么? 好,让我们来看看。 range and address range是范围的意思,在这里的范围,可以是一行,例如12,可以是连续几行,例如12,18表示12到18行(中间用逗号隔开),也可以是.即当前行,又或者$最后行,具体可看表格。 符号 含义 1 文件的一行 $ 文件最后一行 0 文件第0行(虚拟的) . 当前光标行 ’m 标记为m的行 ‘< 选择模式的开始 ‘> 选择模式的结束 % 整个文件(相当于:1,$) ##使用:t和:m命令来复制和移动文本 ...

April 15, 2013