android源码分析-aapt

本文介绍了aapt(Android Asset Packaging Tool)工具的基本功能及其在Windows平台上的移植经验。aapt主要用于处理ZIP格式文件如apk,并能将资源文件编译为二进制格式。文中详细讲述了移植过程中的关键步骤及遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      aapt就是Android Asset Packaging Tool ,一般在sdk的tools中可以找到,一般是和adb之类的工具在一起。这个工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk)。 也可将资源文件编译成二进制文件。

    android的核心代码还没有来得及看呢,这篇我主要是讲述这几天将linux上面的这块代码一直到windows上面的经验。aapt这个工具的代码主要是几种在framework/base/tools/aapt中,当然还有一些公共的头文件和src了。主要是在base/include/utils和base/libs/utils中,还有就是这个工具有用到3个开源的库分别是zlib,libpng和expat。我移植aapt就是为了拿到其中aapt的bradging功能以及抽取文件的作用。就像91或者qq的installapk工具一样的功能。对于linux我应该还是个初学者,所以在一直上面做头痛的就是那些使用到linux中的系统库函数了。我的做法很简单,对于编译不过的先声明,后实现。工程建好之后,在移植上面,我们需要在预处理期中定义一下HAVE_MS_C_RUNTIME
HAVE_WIN32_FILEMAP
HAVE_WIN32_THREADS
HAVE_WINSOCK

等宏,这样可以省下很多工作哦(google还是想的挺周到的)。很快,你就发现移植的工作差不多了,在这里,在调试过程中你会发现其中还有一点点小毛病来着。一个是集中在使用_get_ofhandle后的CloseHandle的问题,其实这个CloseHandle可以直接注释点,因为_close之后就没有必要CloseHandle,不信的可以读一下msdn。今天就写到这里,后面再把这部分代码传上去。

安卓编译时出现报错,报错如下,情分析原因。报错信息:[ 18% 707/3795] //prebuilts/sdk/current/support:android-support-compat-nodeps aapt2 link [common] FAILED: out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/package-res.apk out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/proguard.options out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/R.jar out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/R.txt out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/extra_packages rm -rf out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/aapt2/R && out/soong/host/linux-x86/bin/aapt2 link -o out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/package-res.apk --static-lib --no-static-lib-packages --auto-add-overlay --manifest out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/aar/AndroidManifest.xml --auto-add-overlay -I out/soong/.intermediates/frameworks/base/core/res/framework-res/android_common/package-res.apk --java out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/aapt2/R --proguard out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/proguard.options --output-text-symbols out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/R.txt -R @out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/aapt2/overlay.list && out/soong/host/linux-x86/bin/soong_zip -write_if_changed -jar -o out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/R.jar -C out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/aapt2/R -D out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/aapt2/R &&out/soong/host/linux-x86/bin/extract_jar_packages -i out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/gen/R.jar -o out/soong/.intermediates/prebuilts/sdk/current/support/android-support-compat-nodeps/android_common/extra_packages --prefix '--extra-packages ' runtime: failed to create new OS thread (have 2 already; errno=11) runtime: may need to increase max user processes (ulimit -u) fatal error: newosproc
07-19
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值