一个简单的工程来理解android工作(-)
来源:互联网 发布:英语动画配音软件 编辑:程序博客网 时间:2024/06/06 03:58
android工程逆向与开发是一个相互的过程,想要逆向一个android工程,首先需要对android程序的开发以及android系统架构有一个大致de了解,下面通过一个简单的工程开发实例来了解android系统是如何工作的。
1.我们新建一个android 工程
Application Name:应用程序显示给用户的名称。在这个项目中
Project Name:项目目录,并在Eclipse中可见的名称。
Package Name:应用程序包的命名空间(遵循Java中相同的规则)。包的名称必须是唯一。
Minimum Required SDK:应用程序支持的Android SDK的最低版本。为了支持尽可能多的设备,应该设置可以为应用程序提供其核心功能集的最低版本。如果有只在新版本下才支持的功能,并且和核心功能不冲突,可以只在新版本中提供。
Target SDK:代表你已经测试过的最高的版本,随着新版本的Android,你应该在新版本中测试应用程序并更新,以符合最新的API并利用新的平台功能。
Compile With:表示在编译时的应用程序的平台版本。默认情况下,设置为最新版本SDK。
Theme:指定适用于该应用程序的Android UI风格。
其余暂时不管,next....and...next,就回完成工程的创建。
2. 我们来看生成的文件结构:
自上而下:
1. src :存放的当然是我们的JAVA源码。
2.gen:故名思意“根”的意思。它是由ADT插件自动生成的,为代码文件保存路径。我们可以看到,主要包含两个文件
BuildConfig.java文件是你的项目调试(Debug)开关。如:public final static boolean DEBUG = true;
R.java尤为重要,Android会根据你放入res目录的资源,自动更新R.java文件,R.java文件在Application中起到字典的作用,它包含了各种资源的地址(ID),通过R.java文件,应用可以方便找到相应的资源元素。
在开发过程中BuildConfig.java和R.java文件最好都不好人工去修改。
进入R.JAVA,如图:
R.java文件中默认有attr、drawable、layout、string等四个静态内部类,每个静态内部类分别对应着一种资源。如layout静态内部类对应layout中的界面文件,其中每个静态内部类中的静态常量分别定义一条资源标识符,比如publicstatic final int activity_main=0x7f030000;对应的是layout目录下的activity_main.xml文件。
R.java文件按除了有自动标示资源的索引功能之外,另外一个主要的功能,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的APK包中,这样可以节省Android手机的资源。
3. assets:存放项目一些较大的资源文件,例如:图片、音乐、字体等。
4. res:存放项目中所有的资源文件,例如:图片(*.png、*.jpg)、文本,界面xml等。进入内部:
1. res\drawable-hdpi:保存高分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。
2. res\drawable-ldpi:保存低分辩率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。
3. res\drawable-mdpi:保存中等分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。
4. res\layout:存放所有的布局文件,主要是用于排列不同的显示组件,在Android程序中要读取此配置,每个activity对应一个xml
5. res\values: 存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称:
· arrays.xml:定义数组数据;
· colors.xml:定义表示颜色的数据;
· dimens.xml:定义尺度,可以使用Resources.getDimension()获得这些资源;
· strings.xml:定义字符串,可以使用Resources.getString()或Resources.getText()方法获得这些资源;
· styles.xml:定义显示的样式文件;
5.bin:生成的apk文件,我们反编译时,将apk逆向,得到的基本也是这个结构。
6.AndroidManifest.xml 功能清单文件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。除了能声明程序中的Activities, ContentProviders, Services, 和IntentReceivers,还能指定permissions和instrumentation(安全控制和测试)。
7.default.properties 项目环境信息,一般是不需要修改此文件
R类与资源文件关系说明
1). 静态类drawable类对应res文件夹中的drawable-hdpi、drawable-ldpi、drawable-mdpi三个文件夹,drawable类中每个整型的静态常量名与这三个文件夹中的图片资源文件相同(不含扩展名),这三个文件夹中相同文件名的资源对应同一个整型变量,Android系统会根据不同类型的屏幕分辨率,自动选取合适的图片资源。
2). 静态类layout类对应res文件夹中的layout文件夹,layout文件夹中的每个布局文件在layout类中都会有一个与文件名相同的整型静态变量。
3). 静态类string对应res/values文件夹中每个XML文件中的字符串资源,如上图中的strings.xml文件定义如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello"> Hello World, HelloWorld!</string>
<string name="app_name">HelloWorld</string>
</resources>
string类使用中每个静态常量名与<string>元素中name属性值相同。
这些在逆向过程中经常用到。
- 一个简单的工程来理解android工作(-)
- Android程序测试(1)——新建一个简单的测试工程来测试已有的工程
- Android程序测试(1)——新建一个简单的测试工程来测试已有的工程
- 建立一个简单的android涂鸦工程
- 创建一个简单的android aidl工程
- 自己来做一个简单的web服务器(一)理解基本的http协议
- 理解eclipse(java工程)的工作目录
- 理解eclipse(java工程)的工作目录
- android工程作为另外一个工程的模块来使用的方法
- 创建一个简单的android工程的步骤
- 创建一个较简单的 eclipse+android+maven 工程
- 创建一个简单的 eclipse+android+maven 工程
- android ndk 入门 - 一个简单的ndk工程
- 一个简单的SpringMVC工程
- maven 学习笔记(二)创建一个简单的 eclipse+android+maven 工程
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的(原创)
- 从一个简单的mykernel来分析Linux系统工作过程
- 知乎上的一个关于线代的通俗简单理解方法写的不错转过来
- CalTech machine learning, video 13 note(validation)
- 关于 for update
- 网址末尾反斜杠的意义
- 学习点滴(二)
- NodeJs
- 一个简单的工程来理解android工作(-)
- 1642 - Magical GCD (数论)
- tableview小结
- window平台下 Eclipse Ndk开发中的Method 'NewStringUTF' could not be resolved问题
- c语言socket通信
- java.util.prefs.WindowsPreferences <init>异常警告
- 简单几步在eclipse集成环境中代码显示行号
- 浅学设计模式--单例模式
- jni/../../Classes/AppDelegate.cpp:29: error: undefined reference to