`
yjhexy
  • 浏览: 331228 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

android 反编译必知-public.xml

 
阅读更多

 

见链接:

 

http://stackoverflow.com/questions/6517151/how-does-the-mapping-between-android-resources-and-resources-id-work/6646113#6646113

 

转载:

At build time, the aapt tool collects all of the resources you have defined (though separate files or explicit definitions in files) and assigns resource IDs to them.

A resource ID is a 32 bit number of the form: PPTTNNNN. PP is the package the resource is for; TT is the type of the resource; NNNN is the name of the resource in that type. For applications resources, PP is always 0x7f.

The TT and NNNN values are assigned by aapt arbitrarily -- basically for each new type the next available number is assigned and used (starting with 1); likewise for each new name in a type, the next available number is assigned and used (starting with 1).

So if we have these resource files handled by aapt in this order:

layout/main.xml
drawable/icon.xml
layout/listitem.xml

The first type we see is "layout" so that is given TT == 1. The first name under that type is "main" so that is given NNNN == 1. The final resource ID is 0x7f010001.

Next we see "drawable" so that is given TT == 2. The first name for that type is "icon" so that gets NNNN == 1. The final resource ID is 0x7f020001.

Last we see another "layout" which has TT == 1 as before. This has a new name "listitem" so that gets the next value NNNN == 2. The final resource ID is 0x7f010002.

Note that aapt by default makes no attempt to keep these identifiers the same between builds. Each time the resources change, they can all get new identifiers. Each time they are built, a new R.java is created with the current identifiers so your code gets the correct values. Because of this, you must never persistent resource identifiers anywhere where they can be used across different builds of your app.

Once the resources are compiled and identifiers assigned, aapt generates the R.java file for your source code and a binary file called "resources.arsc" that contains all of the resource names, identifiers, and values (for resources that come from separate file, their value is the path to that file in the .apk), in a format that can easily mmapped and parsed on the device at runtime.

You can get a summary of the resources.arsc file in an apk with the command "aapt dump resources <path-to-apk>".

The format of the binary resource table is documented in the header file for the resource data structures here:

https://github.com/android/platform_frameworks_base/blob/master/include/androidfw/ResourceTypes.h

The full implementation for reading the resource table on the device is here:

https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/ResourceTypes.cpp

分享到:
评论

相关推荐

    android apk 反编译java文件对应的资源批量修改(更改为R.java文件中的R.string.name格式)

    Android的apk文件反编译后,甚多的资源...(2)从反编译出的文件夹中,找到public.xml文件,依据代码说明执行代码,可以将反编译出的java文件引用的资源数字重新更改为R.type.name格式,使得java文件资源引用重新关联。

    AndroidXML反编译神器工具使用说明

    3.现在反编译工具,比如XP系统32位和WIN7系统32位选择Android_decompilation.exe,WIN7系统64位选择Android反编译工具(64位).exe 4.选择后点击浏览按钮,选择你要反编译的APK,APK存放的上面层最好不要有中文文件夹...

    android反编译apk资源文件demo

    本教程将聚焦于“android反编译apk资源文件demo”,通过一个具体的示例——“apkparserdemo”来探讨如何解析XML文件,特别是加密过的AndroidManifest.xml文件。 AndroidManifest.xml是每个Android应用的核心配置...

    android2.3 eclipse ant混淆

    在Android应用开发中,安全性和性能优化是至关...混淆不仅可以增强应用的安全性,还能降低反编译的可能性,为你的源码提供额外的保护。同时,注意混淆也会带来一定的学习成本,需要不断实践和调试,才能掌握其精髓。

    安卓方案类-游戏发行切包资源索引冲突解决方案.docx

    - `public.xml`是apktool在反编译apk时,根据`resources.arsc`文件自动生成的。`resources.arsc`存储了apk的所有资源信息。 - 此文件的主要作用是在打包资源时固定资源ID,确保在打包过程中使用已有的ID。 - ID由...

    浅入浅出Android安全(中文版).pdf

    Java作为一种解释型语言,相较于C/C++,存在代码被反编译的风险。为了增强代码的安全性,Android提供了默认的混淆器Proguard。Proguard不仅能够混淆代码,使其难以被逆向工程解析,还能压缩和优化Java字节码,删除...

    Android APK+Dex文件反编译及回编译工具(APKDB)v.1.9.2 正式版

    是一款,针对Android OS系统的APK程序,直接反编译修改的工具。 APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具; 正常安装后,它直接在【鼠标右键】创建快捷菜单; 非常方便汉化工作者,对APK或Dex文件...

    Android studio tool.zip

    ProGuard是Android Studio内置的混淆工具,它可以重命名类、方法和变量名,使其变得难以阅读,从而防止反编译。以下是如何配置和使用ProGuard: 1. **启用混淆**:在`build.gradle`文件中找到`android`块,启用...

    Android代码混淆及签名.doc

    混淆主要是为了保护应用程序的源代码不被轻易反编译和理解,而签名则确保应用的完整性和身份验证。 一、代码混淆 1. 概念:代码混淆是将Java源代码中的类名、方法名、变量名等转换为无意义的短名称,使得反编译后...

    java开源包10

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    Android应用的文件结构1

    在反编译后,它对应于res下的string.xml和public.xml等XML文件。 4. **res** 文件夹: 包含了应用的所有资源,如drawable(图片)、layout(布局)、values(字符串、颜色等)等。这些资源在编译过程中会被处理,...

    详解Android的反编译和代码混淆

    在Android开发中,为了保护应用的安全性和防止未经授权的第三方对代码进行逆向工程,开发者通常会使用反编译和代码混淆技术。本文将详细介绍这两个关键概念。 首先,我们来看反编译。Android应用的主要组成部分是...

    android apk代码混淆

    在Android开发过程中,为了保护源代码不被轻易反编译以及减少APK包的体积,通常会采用代码混淆技术。本文将详细介绍如何进行Android项目的代码混淆,并结合给定的配置文件内容,深入解析各项设置的作用。 #### 1. ...

    反编译常见问题

    在Android开发过程中,有时我们需要对APK或者aar文件进行反编译来查看源代码或进行逆向工程。本文主要探讨反编译过程中遇到的一些常见问题及其解决方案。 首先,当反编译工程文件后,需要检查资源文件(res)和配置...

    android4.0屏蔽home键实现.pdf

    // 以下flag值可能会因系统版本不同而有所变化,1280是apktool反编译后的一个示例值 mLockViewLayoutParams.flags = 1280; } public void lock() { if (mLockView != null) { mWindowManager.addView...

    air for android hello world

    为了深入学习,你可以解压这个文件,使用反编译工具(如Apktool)查看其内部结构,进一步理解AIR应用在Android上的工作原理。 总之,"air for android hello world" 是一个入门级的教程,涵盖了使用Adobe AIR开发...

    Android 调用C++代码和C++代码调用源码.zip

    本文将深入探讨Android如何调用C++代码以及C++如何反过来调用Java代码,同时会提供相关的源码示例进行解析。 首先,Android应用主要由Java编写,但通过JNI接口,我们可以编写原生的C/C++代码并与Java代码交互。JNI...

    android WIFI 扫描 Demo

    `.project`和`proguard.cfg`是Eclipse项目的配置文件,`.project`包含了项目的元数据,`proguard.cfg`则是用于代码混淆的配置,防止反编译。 在实际的开发过程中,你还需要处理一些其他细节,比如异常处理、权限...

    ant修改参数重新编译的 Proguard 4.7

    **Ant与Proguard在Android开发中的应用** 在Android应用程序开发过程中,为了提高代码的安全性和优化应用性能,开发者通常会使用混淆工具对代码进行混淆。Proguard是一款强大的Java字节码混淆器、优化器和裁剪器,...

Global site tag (gtag.js) - Google Analytics