# AS的项目结构

<https://developer.android.com/studio/projects/index.html>

## building-cmdline

<https://developer.android.com/studio/build/building-cmdline.html> Build Your App from the Command Line:命令行编译你的应用

## directory

```
.idea目录必须,其下.name compiler.xml encodings.xml msic.xml(svn基本信息) modules.xml(组件清单)五个文件必须
gradle目录,如果没有,可以从新建项目中拷贝进来,这是必须目录
.gitignore因需选择
build.gradle
gradle.properties
gradlew
gradlew.bat
settings.gradle 此为相当重要的配置,如没有,必须手动根据格式去创建并写入include {module}
组件内:libs src build.gradle proguard-android.txt proguard-rules.pro为必须
```

## 当androidstudio项目被破坏SVN环境恢复方法

1.把开.idea/misc.xml增加

```markup
<component name="SvnBranchConfigurationManager">
    <option name="myConfigurationMap">
      <map>
        <entry key="$PROJECT_DIR$">
          <value>
            <SvnBranchConfiguration>
              <option name="branchUrls">
                <list>
                  <option value="svn://192.168.210.170/android/hongsanban/branches" />
                  <option value="svn://192.168.210.170/android/hongsanban/tags" />
                </list>
              </option>
              <option name="trunkUrl" value="svn://192.168.210.170/android/hongsanban/trunk" />
            </SvnBranchConfiguration>
          </value>
        </entry>
      </map>
    </option>
    <option name="mySupportsUserInfoFilter" value="true" />
  </component>
```

## resources.arsc

apk包中的resources.arsc是项目中使用的res资源的，其格式是个decoding文件。

项目打包时，先把res构建到 \*.ap\_里，再构建到apk中的resources.arsc里，可以使用AS直接打开查看它的内部关系。

### 资源在AndroidProject中的使用方式

1. java中使用的是**R.{type}.{id}**,都是以 **0xXXXXXXXX**的值在其中使用。生成的文件，本就是直接使用十六进制，固加固不用处理它。
2. 在xml中使用的都是相应&#x7684;**@drawable...** **@anim...** **@layout...**&#x7B49;方式。 可以转成使&#x7528;**@ref/0xXXXXXXXX**的方式去使用。

因在AS中的无法在资源中使&#x7528;**@ref/0xXXXXXXXX**时会报错，也不方便操作，固不可这样弄。

```
??? 使用resGuard混淆resources时，全出现< include >标签内的引用没变更，但还能正常运行，带研究（20170315）???  --> **猜测**可能同resources.arsc的键值关系有关，可以追踪得到它的真实引用。
```

### 对应资源关系

以下不为绝对对应关系，如果项目中缺少某项时，会依次排序减序号值。

| Serial | Resources\_Types | ID               |
| ------ | ---------------- | ---------------- |
| **1**  | attr             | 0x7f **01** XXXX |
| **2**  | drawable         | 0x7f **02** XXXX |
| **3**  | mipmap           | 0x7f **03** XXXX |
| **4**  | layout           | 0x7f **04** XXXX |
| **5**  | anim             | 0x7f **05** XXXX |
| **6**  | animator         | 0x7f **06** XXXX |
| **7**  | raw              | 0x7f **07** XXXX |
| **8**  | string           | 0x7f **08** XXXX |
| **9**  | dimen            | 0x7f **09** XXXX |
| **a**  | style            | 0x7f **0a** XXXX |
| **b**  | bool             | 0x7f **0b** XXXX |
| **c**  | integer          | 0x7f **0c** XXXX |
| **d**  | color            | 0x7f **0d** XXXX |
| **e**  | id               | 0x7f **0e** XXXX |
| **f**  | menu             | 0x7f **0f** XXXX |

## ![resources.arsc](https://1784015749-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6gnm_CndD_8YqVM60R%2Fsync%2F96bc4e2c8ab0da0180ca47b79ba0632c5f1bf624.png?generation=1588815962558982\&alt=media)

### Name的取值规则

范围(1234567890\_abcdefghijklmnopqrstuvwxyz)共37个字符。 1. 首字符：(a-z) 2. 第二个字符起：(1234567890\_abcdefghijklmnopqrstuvwxyz)

e.g.: **b\_** 表示第36个值。 **（取值先是一位a-z，再续a+第二位： 26+10=36）.但值不一定是连续的，因为存在shrink resource，或无规则设置等原因。** ![](https://1784015749-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6gnm_CndD_8YqVM60R%2Fsync%2Fc8bcb071cf0d60510e987aae3ef94b38e466c65d.jpg?generation=1588815965199902\&alt=media)

### resources.arsc的还原格式

使用andResGuard方式打包时，看到的它的resource*mapping*....txt文件的指示。

```
res path mapping:
    res/anim -> res/a
    res/animator -> res/b
    res/color -> res/c
    res/color-v11 -> res/d
    res/drawable -> res/e
    res/drawable-hdpi-v11 -> res/f
    res/drawable-hdpi-v4 -> res/g
    res/drawable-ldrtl-hdpi-v4 -> res/h
    res/drawable-ldrtl-mdpi-v4 -> res/i
    res/drawable-ldrtl-xhdpi-v4 -> res/j
    res/drawable-ldrtl-xxhdpi-v4 -> res/k
    res/drawable-ldrtl-xxxhdpi-v4 -> res/l
    res/drawable-mdpi-v11 -> res/m
    res/drawable-mdpi-v4 -> res/n
    res/drawable-xhdpi-v11 -> res/o
    res/drawable-xhdpi-v4 -> res/p
    res/drawable-xxhdpi-v11 -> res/q
    res/drawable-xxhdpi-v4 -> res/r
    res/drawable-xxxhdpi-v11 -> res/s
    res/drawable-xxxhdpi-v4 -> res/t
    res/layout -> res/u
    res/layout-v17 -> res/v
    res/layout-v21 -> res/w
    res/menu -> res/x
    res/mipmap-hdpi-v4 -> res/mipmap-hdpi-v4
    res/mipmap-mdpi-v4 -> res/mipmap-mdpi-v4
    res/mipmap-xhdpi-v4 -> res/mipmap-xhdpi-v4
    res/mipmap-xxhdpi-v4 -> res/mipmap-xxhdpi-v4
    res/raw -> res/y


res id mapping:
    {package}.R.attr.absListViewStyle -> {package}.R.attr.a
    ...
```
