Android开发小记(二)

Posted by Csming on 2016-12-10

新增资源无法通过编译

  • Android Studio提示以下信息

Error:Execution failed for task ‘:app:mergeDebugResources’. > Crunching Cruncher scrollbar_thumb.9.png failed, see logs

  • 解决方法
    在build.gradle中添加如下字段

aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false

  • 原理
    appt即:Android Asset Packaging Tool

在SDK的build-tools目录下。该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。也就是上面我们说的两项配置。

aapt工具也支持很多子命令。
aapt l[ist]:列出资源压缩包里的内容。
aapt d[ump]:查看APK包内指定的内容。
aapt p[ackage]:打包生成资源压缩包。
aapt r[emove]:从压缩包中删除指定文件。
aapt a[dd]:向压缩包中添加指定文件。
aapt v[ersion]:打印aapt的版本。

示例:

aapt -A <附件资源路径> -S <资源路径> -M <Android应用清单文件> -I <额外添加的包> And -F 目标文件路径

出现以上情况可能是因为aapt被关闭,无法生成R.java中的索引造成的


  • 下面小记一下aapt的用法

1.aapt l[ist] [-v] [-a] file.{zip,jar,apk}

List contents of Zip-compatible archive.

1.1列出压缩文件目录

aapt l <file_path.apk>
参数:
-v:会以table的形式输出目录,table的表目有:Length、Method、Size、Ratio、Date、Time、CRC-32、Name。
其中Method表示压缩形式,有:Deflate及Stored两种,即该Zip目录采用的算法是压缩模式还是存储模式;可以看出resources.arsc、*.png采用压缩模式,而其它采用压缩模式。
Ratio表示压缩率。CRC-32未明其意,Sodino盼指教。
-a:会详细输出所有目录的内容。

2.aapt d[ump] [–values] WHAT file.{apk} [asset [asset …]]

badging Print the label and icon for the app declared in APK.
permissions Print the permissions from the APK.
resources Print the resource table from the APK.
configurations Print the configurations in the APK.
xmltree Print the compiled xmls in the given assets.
xmlstrings Print the strings of the given compiled xml assets.

3.1使用aapt生成R.Java

rem 测试的工程目录下必须得有gen文件夹,否则会提示:Unable to open class file R.java:No such file or directory

%aapt% package -f -m -J %GEN% -S %RES% -I %ANDROID_JAR% -M %ANDROID_MANIFEST_XML%

3.2使用aapt生成资源包文件
%aapt% package -f -M %ANDROID_MANIFEST_XML% -S %RES% -A %ASSETS% -I %ANDROID_JAR% -F %RESOURCE%

%GEN%:存放的R.java文件夹路径。
%RES%:res文件夹路径。
%ANDROID_JAR%:引用的Android.jar路径。
%ANDROID_MANIFEST_XML%:工程AndroidManifest.xml绝对路径。
%ASSETS%:asset文件夹路径。
%RESOURCE%:生成的resouces.arsc存放路径。

以上用法来自:http://blog.csdn.net/g19920917/article/details/20244937


  • 再谈谈aapt
    用于设置AAPT的属性

failOnMissingConfigEntry: Forces aapt to return an error if it fails to find an entry for a configuration.
ignoreAssets: Pattern describing assets to be ignore.
noCompress: Extensions of files that will not be stored compressed in the APK.
useNewCruncher: Whether to use the new cruncher.

关于Gradle的配置文件用法:http://www.jianshu.com/p/7e3a69dbd20e