一个简单的工程来理解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:代表你已经测试过的最高的版本,随着新版本的Andr​​oid,你应该在新版本中测试应用程序并更新,以符合最新的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属性值相同。

这些在逆向过程中经常用到。




0 0
原创粉丝点击