android apktool使用 | cfanr

作者:JerryXia | 发表于 , 阅读 (40)
###为什么需要了解?通过apktool反编译获取别人app里面的图片资源和xml文件的布局设计来进行学习。
###需要条件(windows平台下)1.配置好Java环境2.下载最新版的apktool的jar包:https://bitbucket.org/iBotPeaches/apktool/downloads3.测试用的任意.apk安装包: xxx.apk
###步骤1.打开cmd命令行,进入apktool.jar和xxx.apk所在的文件夹(置于同一个文件夹,方便操作)2.输入java -jar apktool.jar,可以看到相关的使用命令的提示,d是反编译指令

3.再输入java -jar apktool.jar d xxx.apk,即可完成反编译

4.得到的文件有manifest文件和res下的资源文件,还有smali文件(可理解为运行在JVM的语言)

另外,直接修改.apk包后缀为.zip然后解压,也可以获取到app的相关资源文件,但xml文件是经过编译的机器码,而通过apktool可以得到未编译的xml文件。
扩展阅读:Android APK反编...阅读全文

android studio SQLite Database小例 | cfanr

作者:JerryXia | 发表于 , 阅读 (57)
##简述SQLiteDatabase是一个可以进行增(Create)、查(Retrieve)、改(Update)、删(Delete)数据,即CRUD操作的类。下面教程将向你展示如何使用SQLiteDatabase在Android中实现CRUD操作。
工具使用:Android studio 1.1.0
TODO在这个教程中,我们将创建一个app,允许对一个student表进行增查改删的数据操作。很容易吗?是的,如果你知道怎样做的话 :)
##表结构这个student表将用于存储学生的详细数据,为了简单,只创建3个域,如下图:

id是主键,允许自增
##页面布局创建两个页面布局,第一个页面展示所有学生名字,如下图:

第二个页面是学生的详细信息的页面,用户点击listview的每个item时,将会进入这个页面,如下图:

##布局实现1.新建一个SQLiteDemo的project;2.实现第一个页面布局activity_main.xml123456789101112131415161718192021222324252627282930<RelativeLayout...阅读全文

【Effective Java】创建和销毁对象 | cfanr

作者:JerryXia | 发表于 , 阅读 (46)
###一、考虑用静态工厂方法代替构造器
构造器是创建一个对象实例的最基本最常用的方法。开发者在使用某个类的时候,通常会使用new一个构造器来实现,其实也有其他方式可以实现的,如利用发射机制。这里主要说的是通过静态类工厂的方式来创建class的实例,如:123public static Boolean valueOf(boolean b) {    return b ? Boolean.TRUE : Boolean.FALSE;}
静态工厂方法和构造器不同有以下主要优势:1.有意义的名称。可能有多个构造器,不同构造器有不同的参数,而参数本身并不能确切地描述被返回的对象,所以显得有点模糊,而具有适当名称的静态工厂可读性更强,表达也更清晰。如,构造器BigInteger(int, int, Random)返回一个BigInteger可能是一个素数,改名为BigInteger.probablePrime的静态工厂方法表示也就更加清晰。
2.不必在每次调用的时候创建一个新的对象。 这样可以避免创建不必要的重复对象,提高程序效率。
3.可以返回原返回类型的任何子类型的对象。 Java的很多...阅读全文

设计模式思考 I | cfanr

作者:JerryXia | 发表于 , 阅读 (43)
##前言最近复习设计模式,花了不少时间,由于项目经验还比较少,虽然看得懂,能理解,但鉴于个人比较偏实践,不善于记忆,隔一段时间后,却很快就忘记了o(╯□╰)o,到真正自己说的时候也说不出来……与其看别人的总结,不如自己再根据别人的博客再思考整理一番,或许这样比反复看的效果会好些吧。下面是根据别人的博客和以下几点思考方式来重新整理的笔记:1.这种模式怎么理解?(尽量简单易懂)2.类图怎样画?(代码怎样写)3.举个栗子?(使用场景)4.使用这种模式有什么优缺点?(遵循什么原则)
##设计模式六大原则1.开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2.里氏代换原则(Liskov Substitution Principle)里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏...阅读全文

设计模式思考II | cfanr

作者:JerryXia | 发表于 , 阅读 (48)
续 设计模式思考 I
思考方式:1.这种模式怎么理解?(尽量简单易懂)2.类图怎样画?(代码怎样写)3.举个栗子?(使用场景)4.使用这种模式有什么优缺点?(遵循什么原则)
##结构型模式
###7.代理模式(Proxy)(1)理解多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介。(2)类图

(3)栗子JDK动态代理,RMI(远程方法调用)使用场景:如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:a.修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。b.就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
(4)优缺点优:将功能划分的更加清晰,有助于后期维护另外,代理模式,可以分为两种,一种是静态代理,一种是动态代理。两种代理从虚拟机加载类的角度来讲,本质上都是一样的,都是在原有类的行为基础上,加入一些多出的行为,甚至完全替换原有的行为。静态代理采用的方式就是我们手动的将这些行为换进去,然后让编译器帮我们编译,同时也就将字节码在原有类的基础上加入一些其他的东西或者替换原有的东西,产生一...阅读全文