您的位置:首页 > 移动开发 > Android开发

Android高级应用开发(基础篇) - stage2 - 学习笔记

2013-11-22 16:39 796 查看
HelloWorld程序的讲解

Eclipse-> File -> New Android Project

1、Create newproject in workspace

2、Createproject from existing source

相当于import一个项目

3、Createproject from existing sample

打开的是Android SDK中samples目录中的例子,根据不同SDK版本例子不同

真机屏幕通过电脑展示的工具Android Screen Monitor,安装和使用方法:

1、下载网址:http://code.google.com/p/android-screen-monitor/

2、解压,得到asm.jar

3、在asm.jar所在的目录下执行命令:java -jar asm.jar即可

4、选择连接的设备

运行效果如下所示:

选择程序运行的设备:在运行按钮 -> Runconfiguration -> target

运行完成后,安装到手机的哪里去了?

运行 adb shell,进入手机的控制台(手机是linux系统)

data/app文件夹下就是安装的第三方的程序目录(存放的安装包),但是由于手机没有root所以看不到

data/data文件夹下存放的是程序的类库和相关的地址(assert资源、SQL数据库等)

system/app文件夹下是系统级的应用程序,如Mms.apk,Email.apk等

Java : JVM -> class -> jar

Android : dalvik -> dex (二进制执行文件) -> apk

程序的安装过程:

编译 -> 通过ADB上传到手机 -> 安装apk(其实就是解压的过程)

手机上的/system/app/目录下的文件有一对,为apk文件和odex文件

将手机上的文件复制到电脑上:

adb pull/system/Mms.apk Mms.apk

adb pull/system/Mms.odex Mms.odex

就把Mms.apk和Mms.odex文件下载到了当前文件夹下

解压缩Mms.apk文件,发现与普通apk文件不同的是没有dex二进制执行文件

odex是基于apk中dex文件生成的,通过了压缩、加密和混淆,又绑定了签名

是为了商业安全的考虑,降低破解和盗版的难度

dpi:分辨率,是1英寸有多少个像素点

ldpi代表的是120dpi

mdpi代表的是160dpi

hdpi代表的是240dpi

assets与raw的区别

assets是根目录下的文件夹,与res目录平级,使用里面的资源需要通过路径和文件名调用,并且方便建立子文件夹

raw是res目录下的文件夹,可以通过R.raw.id调用

使用assets目录文件的方法:

AssetManager assetManager = getAssets();
try{
editText.setText(readStream(assetManager.open("text.txt")));
} catch(IOException e){
e.printStackTrace();
}


使用raw目录文件的方法:

InputStream inputStream = getResources().openRawResource(R.raw.text);
editText.setText(readStream(inputStream));


readStream方法:

private String readStream(InputStream is){
try{
ByteArrayOutputStream bo = new ByteArrayOutputStream();
int i = is.read();
while(i != -1){
bo.write(i);
i = is.read();
}
return bo.toString();
} catch(IOException e){
return "";
}
}


对比生成apk的图例



classes.dex是二进制的执行文件

resources,arsc是所有资源文件的索引(资源表)

aapt是android sdk工具中platform-tools中的打包编译工具

DX工具也是platform-tools下的工具,是windows下的批处理文件,可以打开查看

临摹是最好的学习方法之一——反编译dex

dexdump是sdk platform-tools下负责反编译dex文件的工具

命令格式:dex -d dex文件所在路径 > 写到的txt文档

反编译出的文件可以读取一定的信息,但不是想要的那种形式(是由dex转到Smali)

除了raw和assets目录下的文件,其他的如AndroidManifest.xml和其他xml格式经过编译和加密已经无法读取

所以反编译针对的内容有两类:

1、dex

2、xml

不用rar解压,使用apktool解压apk文件

下载apktool.jar和apktool.bat文件,放在一个目录下,批处理文件其实就是使用java -jar apktool运行apktool的jar包

使用apktool d Demo.apk demo (d是参数,第一个apk是源文件,第二个demo是目的文件夹)

加压后就发现xml文件可读了,也没有生成dex文件,而是直接生成了smali文件

文件对比工具:Beyond Compare 3

专门用来做目录和文本文件的对比,看源代码时的效果比较好

编译过程:Java -> class -> dex

反编译过程:dex -> jar -> class -> java(class步骤可选)

从dex到jar包的工具为dex2jar

class到java工具为xjar,这步其实是java的范畴,统称为JD(Java Decompiler),核心为JD-Core

dex2jar命令:dex2jar classes.dex demo.jar

然后使用XJad就能直接打开生成的demo.jar文件了

分析HelloWorld,没有main函数

一个守护进程zgnote,会生成一个虚拟机VM,加载并管理每个App

Log工具:

1、LogCat

2、DDMS

LogCat已经被集成到DDMS界面中

LogCat中如果pid为0则表明是由root发起的

何时会看日志:

1、程序出错了,看bug

2、调试程序的时候,看自己打的log

看日志什么内容:

1、按优先级别看,程序出错看红色

2、如果自己打的log,就追踪自己的tag

一般有下面几种情况会产生log文件

1、程序异常退出,uncaused exception

2、程序强制关闭,Force cloase(FC)—— 在Log文件中标记为FATAL

3、程序无响应,Application No Response(ANR)—— 在Log文件中直接搜索ANR即可

何时会产生ANR:

1、界面操作等待响应时间超过5秒

2、HandleMessage回调函数中执行超过10秒

Log文件生成的位置:

/data/log

手机有两种出厂模式

1、development(开发模式)

2、user(可能不支持Log文件或者某些开发功能)

Log文件组成:

1、系统基本信息,包括内存、CPU、进程队列、虚拟内存、垃圾回收等信息

2、事件信息,主要分析的信息(与DDMS里的log的内容相似)

3、虚拟机信息,包括进程的、线程的跟踪信息,这是用来跟踪进程和线程具体点的好地方

开了一个程序,然后点击Home按钮,程序进入background状态

此时程序不消耗CPU资源,但消耗内存资源

其实不用通过某些手段kill掉这些后台进程,因为如果内存不足时android的机制会根据优先级自动管理后台程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: