startActivityForResult()

startActivityForResult() 举例说我想要做的一个事情是,在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。 目的: A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A 先看 A.java 的相关代码 //- A.java -// /* 要做两件事情,第一是用 startActivityForResult() 启动B,其次是回收B的结果 */ //启动B Intent bintent = new Intent(A.this, B.class); //设置 bintent的Bundle的一个值 String bsay = “Hello, this is B speaking”; bintent.putExtra(“listenB”, bsay) startActivityForResult(bintent,0); // 参数(Intent intent, Int requestCode) 的 requestCode 对应下面回收Bundle时识别用的 //重写onActivityResult()来处理返回的数据,建议先看B.java 的代码再回来看这里比较好理解 //这理有三个参数 requestCode, resultCode, data protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK case RESULT_OK: Bundle b=data.getExtras(); //data为B中回传的Intent String str=b.getString(“ListenB”);//str即为回传的值"Hello, this is B speaking" ...

2014-08-26 · 1 min · 142 words · -

摄影构图

摄影构图 在《辞海》中是这样解释“构图”的,“构图"为艺术家为了表现作品的主题思想和美感效果,在一定的空间,安排和处理人、物的关系和位置,把个别或局部的形象组成艺术的整体。 https://zhuanlan.zhihu.com/p/52292163 https://zhuanlan.zhihu.com/p/21261635 中心构图, 中心构图是将主体放在画面中心构图,也是比较保险和常用的构图方法。这种方式的优点是能突出主体、明确,而且能够找到画面平衡点。 三分法, 三分法也是比较常见的构图方法。画面一般是横竖各两条线,形成“井”字排布,将画面分为九等分。很多手机和相机都会带这种构图参考线。交叉点是画面最吸引人的地方,将主体放在这个位置也是三分构图的基本原则。 水平线构图, 水平伸展的直线,可以让画面看起来比较宽阔、稳定、和谐。比如地平线和水平面,将两个空间分隔开,给人更多的想象空间。那么,水平线居于什么位置才是好的呢?这也要看情况。比如你想让画面和谐,可以选择三分之一的视觉兴趣线。如果你天空云比较艳丽,你可以多拍天空,如果云颜色单调,你想突出地上的景物,就多拍地面。另外,如果你想拍水面或湖面镜面倒影的感觉,也可以将水平线放在中间,增强对称感。 对称式构图, 说到对称,这里要介绍第4种构图方法。对称式构图。想起小时候学的轴对称图形,这里的对称就是让图像景物按对称或对称中心来构图。常与中心构图联合使用,主体位于画面中心。 框架式构图, 框架式构图,利用前景框架产生遮挡,增加画面的深度。当前景景物和主体有区别度时,通过前后的明显对比也更能突出主体,从更加新颖的角度去观察事物,让普通的风景变得与众不同。 引导线, 画面中出现清晰的线条可以引起关注,起到“吸睛”效果。引导线是画面中任何形式的线条,像直线、曲线、汇聚线、平行线、螺旋线等都可以对观众视线引导。它可以用于创造、增强纵深感等。另外,引导线也不一定是具体的线条,比如排列的或者有明显方向延伸趋势的物体,比如墙壁、道路,还有相同的颜色或者阴影等。 对角线和三角形, 构图中,也经常会用到对角线和三角形的构图。这不仅能够强化几何的美感,还可以带来一种动感的张力。 S型构图(曲线构图), 在自然界有变化万千的形状,其中S型曲线总会给人一种柔和、优雅的美感。让人看上去是延长的,变化的,非常有节奏和韵律。像一些风光大片中,道路、小溪、河流是比较常见的。S型构图也可以用在一些弧度小的曲线元素,像在拍摄美女时,可以利用S展示女性身材特有的魅力。 前景与纵深感, 前景在风光摄影中的作用还是比较强大的。前景掩映后是主体,整个空间被拉长,变得更加立体,更具有纵深感和层次感。 利用空白空间, “画留三分空,生气随之发”。画面中留出空白,通过简单的背景突出主体。可以为画面增加更多的深邃意味。这种留白也可以结合简约主义的构图,通过画面比较少的内容,来给观者更多的想象空间。 黄金三角形构图, 黄金三角形构图和三分法相似。只不过这里的直线是从四个角出发的,在图像左右两边形成两个直角三角形。我们要将画面的元素放在交叉位置。这样可以使画面更加丰富,多个三角形相互关联,相互呼应,更具趣味性。 黄金比例构图, 黄金分割的比例原是一个数学规律,也是在自然界中大量存在的。这个比例被更多地运用在绘画和设计中。黄金分割的比例是1:0.618。在摄影构图中比较高级,黄金分割点表现在对角线上的某条垂直线上的点,还是正方形边长为半径延伸出的螺旋线。但在拍摄时,如果你很难找到这个位置,可以利用九宫格构图,其实是黄金分割的简化版。 填满画面, 将主体填满整个画面,不为周围预留空间,可以让观众目光集中在主体,去排除干扰,更多地记住细节。 重复构图法, 重复构图,一般是在特定的情况下。比如水果摊、花丛、或者一面全是窗的墙。画面的内容是不断地重复要拍摄的主体,单调重复的方式来占据画面,这样也能够突出主体。 改变视角, 们经常看到很多摄影师在拍摄时会趴在地上,或者也有的站在楼顶或者更高的位置去拍摄。这其实是想以人眼高度之外的视角去拍摄物体。现在很多相机可以翻转屏幕,你可以试试仰拍。降低或者提高视角,或许会发现拍摄主体不同的美。

2014-08-13 · 1 min · 34 words · -

kindle

kindle 把pdf 发送到 kindle 把电子书比如 pdf 格式的文档 作为附件发送到 xxx@kindle.cn 设置/查看 amazon账号配置的kindle 邮箱地址 https://www.amazon.cn/hz/mycd/myx#/home/settings/payment 账户列表》 数字内容和设备》内容和设备》首选项》个人文档设置》〖发送至Kindle〗电子邮箱 注意!!! 记得设置白名单: “已认可的发件人电子邮箱列表”

2014-08-13 · 1 min · 18 words · -

Git Stash

Git Stash 比如当前分支是 branch0, 新建了一个文件, 之后发现分支不对, 应该是在 branch1 上添加, 这时就可以用 git stash 暂存当前修改, 切换到 branch1 再 git stash pop. git stash # 如果有新添加的文件,那么就需要添加 -a 参数 git stash save -a "msg0" git stash list git stash pop git stash pop 开启某个修改暂存后,会在 stash list 里面将最近一次的修改暂存记录删除掉,而 git stash apply stash@{0} 则不会。 https://blog.csdn.net/daguanjia11/article/details/73810577 Git Stash用法 最近在使用Git管理项目工程的时候,遇到了很多问题,也学习到了很多关于Git常见使用的技巧,下面就其中关于Git Stash的用法和大家分享下。 首先,简单介绍下Git Stash命令的用法,详细的用法在man文档中有相关介绍,下面我来说明常见的使用。 git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。 git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。 git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。 git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。 ...

2014-08-09 · 1 min · 106 words · -

ssh 跳板(Jump Host)的使用

ssh 跳板(Jump Host)的使用 ProxyJump Host hostB HostName 10.124.44.91 User root Host arch-vm HostName 192.168.122.2 User root ProxyJump hostB # jump0: 跳板机 # server0: 目标服务器 host jump0 HostName 192.168.0.1 User user0 Host server0 HostName 192.168.0.2 User user0 ProxyCommand ssh -q -W %h:%p jump0 # %h: ~/.ssh/config 的语法, 代表主机名, 执行的时候会用 HostName 的值替换 # %p: 端口 # https://linux.die.net/man/5/ssh_config # -q 表示代理命令工作在静默模式下,而 -W 则表示 stdio 转发 这里说的 ssh 跳板,是指我们通过一个中继服务器其访问另一台内网服务器。典型的应用场景是在 VPN 网络中,我们进入了 VPN 服务器之后再访问另一个网段的内网服务器。 ...

2014-08-08 · 1 min · 171 words · -

adb command

adb command pacman -S android-tools 在手机上打开USB调试 adb help adb kill-server sudo adb start-server adb devices #这个命令将登录设备的shell adb shell # adb push <本地路径> <远程路径> adb push <本地路径> <远程路径> #列出手机装的所有app 的包名 adb shell pm list packages 查看设备 –查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 adb reboot bootloader adb pull Copies a specified file from an emulator/device instance to your development computer. 从电脑上发送文件到设备 –用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机) adb push Copies a specified file from your development computer to an emulator/device instance. ...

2014-08-07 · 1 min · 153 words · -

EOF

EOF EOF(End of File),是ASCII码中的替换字符(Control-Z,代码26) EOF不是特殊字符,而是定义在 <stdio.h> 中的一个常量,一般等于-1。#define EOF (-1) 以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。 ———————————————— 版权声明:本文为CSDN博主「咕咕怪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_38911591/article/details/89605221 EOF (as defined in the C language) is not a character/not an ASCII value. That’s why getc returns an int and not an unsigned char - because the character read could have any value in the range of unsigned char, and the return value of getc also needs to be able to represent the non-character value EOF (which is necessarily negative). ...

2014-07-31 · 1 min · 81 words · -

经度, 纬度, lng, lat

经度, 纬度, lng, lat 经度 longitude lng 116.677 纬度 latitude lat 39.86864

2014-07-31 · 1 min · 12 words · -

缓冲IO, 缓冲I/O, buffered I/O

缓冲IO, 缓冲I/O, buffered I/O 在系统调用的函数中有 STDIN_FILENO 和 STDOUT_FILENO, STDERR_FILENO, 分别对应标准输入(一般使键盘),标准输出 (一般使显示器),标准错误,(他们都是非负整数,属于文件描述符)。一般在老程序中也将他们分别用 0,1,2 代替,但建议还是使用他们的别名。 在标准IO函数中还有stdin,stdout,stderr等是 FILE * 类型,是属于文件指针,属于标准I/O,高级的输入输出函数。在<stdio.h>中。 而STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用, 在<unistd.h>zh 。 stdin是文件指针,是FILE *类型 STDIN_FILENO是文件描述符,是int类型的 stdout和STDOUT_FILENO同样。 所以使用fread(,,stdin),而read(STDOUT_FILENO),因为函数的参数类型是不一样的 二. 下面使网上的一篇文章,讲解缓冲IO和不带缓冲IO 首先,先稍微了解系统调用的概念: 系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序,及别的功能,这些函数集合起来就叫做程序接口或应用编程接口(Application Programming Interface,API),我们要在这个系统上编写各种应用程序,就是通过这个API接口来调用系统内核里面的函数。如果没有系统调用,那么应用程序就失去内核的支持。 现在,再聊不带缓存的I/O操作: linix对IO文件的操作分为不带缓存的IO操作和标准IO操作 (即带缓存),刚开始,要明确以下几点: 1:不带缓存,不是直接对磁盘文件进行读取操作,像read()和write()函数,它们都属于系统调用,只不过在用户层没有缓存,所以叫做无缓存IO,但对于内核来说,还是进行了缓存,只是用户层看不到罢了。如果这一点看不懂,请看第二点; 2:带不带缓存是相对来说的,如果你要写入数据到文件上时 (就是写入磁盘上),内核先将数据写入到内核中所设的缓冲储存器,假如这个缓冲储存器的长度是100个字节,你调用系统函数: ssize_t write (int fd,const void * buf,size_t count); 写操作时,设每次写入长度count=10个字节,那么你几要调用10次这个函数才能把这个缓冲区写满,此时数据还是在缓冲区,并没有写入到磁盘,缓冲区满时才进行实际上的IO操作,把数据写入到磁盘上,所以上面说的“不带缓存不是就没有缓存直写进磁盘”就是这个意思。 那么,既然不带缓存的操作实际在内核是有缓存器的,那带缓存的IO操作又是怎么回事呢? 带缓存IO也叫标准IO,符合ANSI C 的标准IO处理,不依赖系统内核,所以移植性强,我们使用标准IO操作很多时候是为了减少对read()和write()的系统调用次数,带缓存IO其实就是在用户层再建立一个缓存区,这个缓存区的分配和优化长度等细节都是标准IO库代你处理好了,不用去操心,还是用上面那个例子说明这个操作过程: 上面说要写数据到文件上,内核缓存 (注意这个不是用户层缓存区)区长度是100字节,我们调用不带缓存的IO函数write()就要调用10次,这样系统效率低,现在我们在用户层建立另一个缓存区 (用户层缓存区或者叫流缓存),假设流缓存的长度是50字节,我们用标准C库函数的fwrite()将数据写入到这个流缓存区里面,流缓存区满50字节后在进入内核缓存区,此时再调用系统函数write()将数据写入到文件 (实质是磁盘)上,看到这里,你用该明白一点,标准IO操作fwrite()最后还是要掉用无缓存IO操作write,这里进行了两次调用fwrite()写100字节也就是进行两次系统调用write()。 如果看到这里还没有一点眉目的话,那就比较麻烦了,希望下面两条总结能够帮上忙: 无缓存IO操作数据流向路径:数据——内核缓存区——磁盘 标准IO操作数据流向路径:数据——流缓存区——内核缓存区——磁盘 三. 下面是一个网友的见解,以供参考: 不带缓存的I/O对是文件描述符操作,下面带缓存的I/O是针对流的。 标准I/O库就是带缓存的I/O,它由ANSI C标准说明。当然,标准I/O最终都会调用上面的I/O例程。标准I/O库代替用户处理很多细节,比如缓存分配、以优化长度执行I/O等。 标准I/O提供缓存的目的就是减少调用read和write的次数,它对每个I/O流自动进行缓存管理 (标准I/O函数通常调用malloc来分配缓存)。它提供了三种类型的缓存: 1) 全缓存。当填满标准I/O缓存后才执行I/O操作。磁盘上的文件通常是全缓存的。 2) 行缓存。当输入输出遇到新行符或缓存满时,才由标准I/O库执行实际I/O操作。stdin、stdout通常是行缓存的。 3) 无缓存。相当于read、write了。stderr通常是无缓存的,因为它必须尽快输出。 ...

2014-07-28 · 1 min · 133 words · -

Chrome浏览器运行参数的方法来模拟手机

Chrome 浏览器运行参数的方法来模拟手机 http://www.weste.net/2014/3-26/96040.html 以前我们介绍过如何通过修改Chrome浏览器运行参数的方法来模拟手机访问网站,但是在Chrome 32和33版本以后增加了更加便捷的方法,在开发者工具中只需要设置一下就能方便的模拟各种手机型号的访问效果了。 以前我们介绍过如何通过修改Chrome浏览器运行参数的方法来模拟手机访问网站,但是在Chrome 32和33版本以后增加了更加便捷的方法,在开发者工具中只需要设置一下就能方便的模拟各种手机型号的访问效果了。 方法如下: 打开Chrome浏览器,需要32以后版本的。笔者使用的是Chrome 33版本。 打开"开发者工具",快捷键 (F12或者Ctrl+Shift+i) 。 \ 在"开发者工具"界面的右侧有个"Show drawer"按钮,点击后在"drawer"界面再点击"Emulation"。 \ 这个界面就一目了然了,Device里面可以选择各种手机或者平板设备,大概有20种之多。User Agent和Sensors显示了模拟的数据。点击"Emulate"按钮就可以生效了。 \ 然后就在地址栏里面输入网址吧!看看模拟的效果怎么样? 谷歌Chrome浏览器模拟手机浏览器的方法 (修改启动参数的方法) : http://www.weste.net/2013/5-25/91691.html

2014-06-17 · 1 min · 25 words · -

maven setting, mirror, repository

maven setting, mirror, repository maven mirror, repository mirror和 repository 1 Repository (仓库) 1.1 Maven仓库主要有2种: remote repository: 相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository: 存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}.m2\repository目录 1.2 Remote Repository主要有3种: 中央仓库: http://repo1.maven.org/maven2/ 私服: 内网自建的maven repository,其URL是一个内部网址 其他公共仓库: 其他可以互联网公共访问maven repository,例如 jboss repository等 repository里存放的都是各种jar包和maven插件。当向仓库请求插件或依赖的时候,会先检查local repository,如果local repository有则直接返回,否则会向remote repository请求,并缓存到local repository。也可以把做的东西放到本地仓库,仅供本地使用;或上传到远程仓库,供大家使用。 2 Mirror mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。 2.1 没有配置mirror: 2.2 配置mirror: 此时,B Repository被称为A Repository的镜像。 如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都胡够从它的镜像中获取。 2.3 标签里面放置的是要被镜像的Repository ID。为了满足一些复杂的需求,Maven还支持更高级的镜像配置: ...

2014-05-18 · 2 min · 217 words · -

maven pom

maven pom 基本内容: POM包括了所有的项目信息。 maven 相关: pom定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素 groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为: /org/codehaus/mojo artifactId: 项目的通用名称 version:项目的版本 packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par classifier: 分类 <project xmlns=“http://maven.apache.org/POM/4.0.0" xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.wiloon wechat jar 1.0-SNAPSHOT wechat ...

2014-04-30 · 1 min · 52 words · -

spring annotation

spring annotation @Component;@Controller;@Service;@Repository @Component 在annotaion配置注解中用 @Component 来表示一个通用注释用于说明一个类是一个spring容器管理的类。即就是该类已经纳入到spring的管理中了。而@Controller, @Service, @Repository是 @Component 的细化,这三个注解比 @Component 带有更多的语义,它们分别对应了控制层、服务层、持久层的类。 @Service @Service 用于标注业务层组件,对象名默认是类名 (头字母小写), 如果想自定义,可以@Service(“foo”)这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“foo”) @Scope(“prototype”)来改变。 @Controller用于标注控制层组件 (如struts中的action) @Repository用于标注数据访问组件,即DAO组件 @Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Autowired Spring自己定义的注解, JSR-250规范定义的注解 @Resource @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入 @Value 将外部的值动态注入到Bean中 @Value("normal") private String normal; // 注入普通字符串 @Value("#{systemProperties['os.name']}") private String systemPropertiesName; // 注入操作系统属性 @Value("#{ T(java.lang.Math).random() * 100.0 }") private double randomNumber; //注入表达式结果 @Value("#{beanInject.another}") private String fromAnotherBean; // 注入其他Bean属性: 注入beanInject对象的属性another,类具体定义见下面 @Value("classpath:com/hry/spring/configinject/config.txt") private Resource resourceFile; // 注入文件资源 @Value("http://www.baidu.com") private Resource testUrl; // 注入URL资源 @PostConstruct 注解在方法上,表示此方法是在Spring实例化该Bean之后马上执行此方法,之后才会去实例化其他Bean,并且一个Bean中@PostConstruct注解的方法可以有多个。 ...

2014-04-30 · 1 min · 79 words · -

spring security

spring security spring-security-jwt-guide https://github.com/Snailclimb/spring-security-jwt-guide spring-boot-starter-data-redis 基础依赖,其他依赖根据使用不同的缓存技术选择加入,默认情况下使用 ConcurrentMapCache不需要引用任何依赖 spring-boot-starter-data-redis spring-boot-starter-data-redis依赖于spring-data-redis 和 lettuce 。Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成 Lettuce,但如果你从 Spring Boot 1.5.X 切换过来,几乎感受不大差异,这是因为 spring-boot-starter-data-redis 为我们隔离了其中的差异性。 spring-boot-starter-thymeleaf Thymeleaf 是新一代的模板引擎,在 Spring4.0 中推荐使用 Thymeleaf 来做前端模版引擎。 add maven dependancy HttpSessionSecurityContextRepository.loadContext spring security session serialize json redis https://github.com/spring-projects/spring-session/issues/933 https://github.com/spring-projects/spring-session/blob/2.3.1.RELEASE/spring-session-samples/spring-session-sample-boot-redis-json/src/main/java/sample/config/SessionConfig.java https://my.oschina.net/u/3669799/blog/4282404 https://blog.csdn.net/wamr_o/article/details/99634226 https://github.com/Ceruleans/ssdemo https://my.oschina.net/u/4257408/blog/3662569 <dependency> <groupId>org.springframework</groupId> spring-core</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> spring-context</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> spring-web</artifactId> <version>3.2.8.RELEASE</version> </dependency> add dispatcher servlet in web.xml ...

2014-04-29 · 1 min · 83 words · -

XPath

XPath Xpath表达式 XPath(全称:XML Path Language)即 XML 路径语言,它是一门在 XML 文档中查找信息的语言,最初被用来搜寻 XML 文档,同时它也适用于搜索 HTML 文档。因此,在爬虫过程中可以使用 XPath 来提取相应的数据。 提示:XML 是一种遵守 W3C 标椎的标记语言,类似于 HTML,但两者的设计目的是不同,XML 通常被用来传输和存储数据,而 HTML 常用来显示数据。 您可以将 Xpath 理解为在XML/HTML文档中检索、匹配元素节点的工具。 Xpath 使用路径表达式来选取XML/HTML文档中的节点或者节点集。Xpath 的功能十分强大,它除了提供了简洁的路径表达式外,还提供了100 多个内建函数,包括了处理字符串、数值、日期以及时间的函数。因此 Xpath 路径表达式几乎可以匹配所有的元素节点。 Xpath基本语法 基本语法使用 Xpath 使用路径表达式在文档中选取节点,下表列出了常用的表达式规则: Xpath路径表达式 表达式 描述 node_name 选取此节点的所有子节点。 / 绝对路径匹配,从根节点选取。 // 相对路径匹配,从所有节点中查找当前选择的节点,包括子节点和后代节点,其第一个 / 表示根节点。 . 选取当前节点。 .. 选取当前节点的父节点。 @ 选取属性值,通过属性值选取数据。常用元素属性有 @id 、@name、@type、@class、@tittle、@href。 http://c.biancheng.net/python_spider/xpath.html

2014-04-24 · 1 min · 56 words · -

apk 编译,反编译,AXMLPrinter2,smali,baksmali

apk 编译,反编译,AXMLPrinter2,smali,baksmali http://blog.csdn.net/android_tutor/article/details/5724435 1.AXMLPrinter2.jar 2.baksmali.jar 3.smali.jar 三、准备工作 为了方便起见,作者把AXMLPrinter2.jar, 还有baksmali.jar,还有smali.jar(下下来为了方便重命名),放在Android SDK tools文件夹中如下图所示: 为了便于大家更容易程序比对,作者写了一个简单的应用(叫APKInstaller)目录结构如下图所示: 四、开始拿来主义 1.用 AXMLPrinter2.jar查看apk中的布局xml文件: 将ApkInstaller应用生成的ApkInstaller.apk(为了方便起见放到tools目录里)用WinRAR等 工具打开,将res/layout/main.xml解压出来(也还是放在tools目录里哦) 打开main.xml文件,内容如下(一堆天文): 这时候AXMLPrinter2.jar派上用场了,打开cmd终端,一直进入到tools目录下,输入如下命令: java -jar AXMLPrinter2.jar main.xml > main.txt. (如下图所示) 打开main.txt代码如下(是不是有个123了呵呵~): 为了比对打开源程序中的main.xml代码如下(大家比对一下吧): <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android" android:orientation=“vertical” android:layout_width=“fill_parent” android:layout_height=“fill_parent” <WebView android:id=”@+id/apk_web" android:layout_height=“wrap_content” android:layout_width=“fill_parent” /> 2.用baksmali.jar反编译classes.dex: 将ApkInstaller.apk里的classes.dex解压到tools目录里,然后baksmali.jar就派上用场了,在cmd命令行里输入如下命令: ...

2014-04-14 · 2 min · 223 words · -

虚拟文件系统

虚拟文件系统 为什么需要虚拟文件系统 虚拟文件系统 超级块,superblock inode 为什么需要虚拟文件系统 在 Linux 系统中一切皆文件,除了普通文件之外,目录、字符设备、块设备、套接字、进程、线程、管道等都是“文件”。 用户程序需要一个统一的操作接口屏蔽不同文件系统(ext2/3/4,xfs,vfat,socket)的差异和操作细节 在Linux中对文件的 操作可以跨文件系统而执行。如下图所示,我们可以使用 cp 命令从 fat 文件系统格式的硬盘拷贝数据到 ext2 文件系统格式的硬盘;而这样的操作涉及到两个不同的文件系统. 上层应用几乎不用关注底层的实现细节。我们只需要使用VFS暴露出来的标准的read、write等接口就可以了 通过VFS系统,Linux提供了通用的系统调用,可以跨越不同文件系统和介质之间执行,极大简化了用户访问不同文件系统的过程。 “一切皆是文件”是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。 虚拟文件系统, Virtual File System,VFS VFS 是 Linux 内核中的一个软件层,是内核的子系统之一,为用户空间的程序提供文件和文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节 借助 VFS 可以直接使用open()、read()、write() 这样的系统调用操作文件,而无须考虑具体的文件系统和实际的存储介质。 通过 VFS,Linux 提供了通用的系统调用,可以跨越不同文件系统和介质之间执行,极大简化了用户访问不同文件系统的过程。另一方面,新的文件系统、新类型的存储介质,可以无须编译的情况下,动态加载到Linux中。 “一切皆文件"是Linux的基本哲学之一,不仅是普通的文件,包括目录、字符设备、块设备、套接字等,都可以以文件的方式被对待。实现这一行为的基础,正是Linux的虚拟文件系统机制。 VFS原理 VFS之所以能够衔接各种各样的文件系统,是因为它抽象了一个通用的文件系统模型,定义了通用文件系统都支持的、概念上的接口。新的文件系统只要支持并实现这些接口,并注册到Linux内核中,即可安装和使用。 虚拟文件系统组成部分 Linux为了实现这种VFS系统,采用面向对象的设计思路,主要抽象了四种对象类型: 超级块对象:代表一个已安装的文件系统。 索引节点对象:代表具体的文件。 目录项对象:代表一个目录项,是文件路径的一个组成部分。 文件对象:代表进程打开的文件。 每个对象都包含一组操作方法,用于操作相应的文件系统。 备注:Linux将目录当做文件对象来处理,是另一种形式的文件,它里面包含了一个或多个目录项。而目录项是单独抽象的对象,主要包括文件名和索引节点号。因为目录是可以层层嵌套,以形成文件路径,而路径中的每一部分,其实就是目录项。 接下来介绍一下各个对象的作用以及相关操作。 超级块, superblock 存储一个已安装的文件系统的控制信息(文件系统的状态、类型、大小、区块数、索引节点数等),代表一个已安装的文件系统;每次一个实际的文件系统被安装时, 内核会从磁盘的特定位置读取一些控制信息来填充内存中的超级块对象。一个安装实例和一个超级块对象一一对应。 超级块通过其结构中的一个域s_type记录它所属的文件系统类型。 superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等; Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem 了. ...

2014-04-14 · 5 min · 916 words · -

classes.dex

classes.dex classes.dex: The classes compiled in the dex file format understandable by the Dalvik virtual machine

2014-04-14 · 1 min · 16 words · -

Java反编译, jad, jd-gui

Java反编译, jad, jd-gui Jadclipse JadClipse是Jad的Eclipse插件 jad jad是一款使用非常广泛地Java反编译工具,上面这款Jadclipse就是基于jad的反编译插件,JAD 文件包含 MIDlet 套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。 官方网站: http://varaneckas.com/jad/ JD-GUI JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。 官方网站: http://jd.benow.ca/ jdec http://jdec.sourceforge.net/ uuDeJava http://www.uuware.com/uudejava_cn.htm Minjava Java Decompiler http://jd.benow.ca/ 工具使用jad(还有joda,jd等工具) 使用jad反编译class文件,jad可以配置到eclipse中当做插件,直接下载jad的eclipse插件jar包,放在eclipse的plugin目录下即可。把下载的jad.exe放在JAVA_HOME的bin下。然后eclipse中点击class文件即可查看到源码。 使用其他工具,FrontEnd Plus集成了jad的java反编译工具,支持多个文件的反编译,也支持各种选项。 矫正反编译代码错误和奇怪代码 异常错误 反编译之后出入类似如下代码: DocumentException e; e; e.printStackTrace(); break MISSING_BLOCK_LABEL_67; e; e.printStackTrace(); break MISSING_BLOCK_LABEL_67; e; e.printStackTrace(); break MISSING_BLOCK_LABEL_67; e; 这种处理方式就是异常处理,反编译之后出现的这种情况,修改的时候使用try catch即可,其实完全可以将这块删除之后,然后eclipse会自动提示需要添加异常处理的模块,自动try catch即可。 语句标号 (goto) 这种情况常见于条件语句,即转化为if,else语句即可,这种比较容易判断。 i = 0; goto _L1 _L3: i++; _L1: if(i < 4) goto _L3; else goto_L2 ...

2014-04-11 · 1 min · 180 words · -

apk Decompiler

apk Decompiler 下载dex2jar:https://code.google.com/p/dex2jar/ 当前版本dex2jar-0.0.9.15 用dex2jar把apk转换为.jar文件 解压apk文件得到classes.dex 把classes.dex转成.jar: 在命令行中执行d2j-dex2jar.bat classes.dex 得到jar文件classes-dex2jar.jar

2014-04-10 · 1 min · 10 words · -