摘要: 作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:[ht 阅读全文
posted @ 2012-07-17 18:08 water0504 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。一、反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7- 阅读全文
posted @ 2012-07-17 18:07 water0504 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 一.读取Excel文件内容/**读取Excel文件的内容 * @param file 待读取的文件 * @return */ public static String readExcel(File file){ StringBuffer sb = new StringBuffer(); Workbook wb = null; try { //构造Workbook(工作薄)对象 wb=Workbook.getWorkbook(file); } cat... 阅读全文
posted @ 2012-07-17 17:10 water0504 阅读(241) 评论(0) 推荐(0) 编辑
摘要: jxl是一个韩国人写的java操作excel的工具,在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。使用如下:搭建环境将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。基本操作一、创建文件拟生成一个名为“test.xls”的Excel文件,其中第一个工作表被命名为“第一页”, 阅读全文
posted @ 2012-07-17 16:54 water0504 阅读(204) 评论(0) 推荐(0) 编辑
摘要: AsyncTask实际上就是一个线程池,AsyncTask在代码上比handler要轻量级别,而实际上要比handler更耗资源,因为AsyncTask底层是一个线程池!而Handler仅仅就是发送了一个消息队列,连线程都没有开。但是,如果异步任务的数据特别庞大,AsyncTask这种线程池结构的优势就体现出来了。android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发 阅读全文
posted @ 2012-07-17 10:41 water0504 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 本文主要介绍Android的Handler的使用方法。Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列。每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联。1. Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器。2)线程间通信。在Android的应用启动时,会 创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该 对象向父线程的消息队列发送消息了。由于Android要求在UI线程 阅读全文
posted @ 2012-07-17 10:39 water0504 阅读(442) 评论(2) 推荐(0) 编辑
摘要: 在Android 下面也有多线程 的概念,在C/C++中,子线程可以是一个函数 ,一般都是一个带有循环的函数,来处理某些数据 ,优先线程只是一个复杂的运算过程,所以可能不需要while循环,运算完成,函数结束,线程就销毁。对于那些需要控制的线程,一般我们都是和互斥锁相互关联,从而来控制线程的进度,一般我们创建子线程,一种线程是很常见的,那就是带有消息循环的线程。消息循环是一个很有用的线程方式,曾经自己用C在Linux下面实现一个消息循环的机制 ,往消息队列里添加数据,然后异步的等待消息的返回。当消息队列为空的时候就会挂起线程,等待新的消息的加入。这是一个很通用的机制。在 Android,这里的 阅读全文
posted @ 2012-07-17 10:35 water0504 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 角色综述(回顾): (1)UI thread 通常就是main thread ,而Android 启动程序时会替它建立一个MessageQueue 。(2) 当然需要一个Looper 对象,来管理该MessageQueue 。(3) 我们可以构造Handler 对象来push 新消息到Message Queue 里;或者接收Looper( 从Message Queue 取出) 所送来的消息。(4) 线程A 的Handler 对象可以传递给别的线程,让别的线程B 或C 等能送讯息来给线程A( 存于A 的Message Queue 里) 。(5) 线程A 的Message Queue 里的消息,只 阅读全文
posted @ 2012-07-17 10:33 water0504 阅读(117) 评论(0) 推荐(0) 编辑
摘要: android 有一种叫消息队列的说法,这里我们可以这样理解:假如一个隧道就是一个消息队列,那么里面的每一部汽车就是一个一个消息,这里我们先忽略掉超车等种种因素,只那么先进隧道的车将会先出,这个机制跟我们android 的消息机制是一样的。一、 角色描述1.Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue( 车队,消息隧道) 。2.Handler: 你可以构造Handler 对象来与Looper 沟通,以便push 新消息到Message Queue 里;或者接收Looper( 从Message Queue 取出) 所送来的消 阅读全文
posted @ 2012-07-17 10:32 water0504 阅读(140) 评论(0) 推荐(0) 编辑
摘要: Android 的Timer 一般如下面所写Timer timer = new Timer(); TimerTask task = new TimerTask() { public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; final Handler handler = new Handler() { public void handleM... 阅读全文
posted @ 2012-07-17 09:36 water0504 阅读(171) 评论(0) 推荐(0) 编辑
摘要: Android Timer计时器,实际上Timer和TimerTask都是JDK自带的功能,两个类结合可以实现定时任务执行一次,或者定期重复执行任务。这个例子实现的模拟发射火箭……package basic.android.timer;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;imp 阅读全文
posted @ 2012-07-17 09:31 water0504 阅读(197) 评论(0) 推荐(0) 编辑
摘要: Timers主要是用来在后台运行一些任务。可以把Timer设置为守护线程。当调用cancel时所有已经安排的任务都没会被取消。Timer中的任务是依次执行的,如果一个任务花很长时间才执行完,那么它就可能影响下一个任务的开始执行的时间。TimerTask对任务的实时调度并没有保证,因为作为底层的实现依赖于Object.wait(long)方法。多个线程可以共享不为自己同步的一个定时器。Timer有两种调度模式fixed-rate(固定的调度周期),fixed-period(完整的执行周期)。默认的是fixed-period。fixed-period:public void schedule (T 阅读全文
posted @ 2012-07-17 09:25 water0504 阅读(511) 评论(0) 推荐(0) 编辑