【问题标题】:How to pass arguments to aapt when building android apk?构建android apk时如何将参数传递给aapt?
【发布时间】:2011-10-29 06:30:14
【问题描述】:

我正在 Linux 上使用 ant(不使用 Eclipse)构建一个 apk,并且我试图找到一种简单的方法来在压缩资产和不压缩资产之间进行切换,以使我的庞大数据库在

http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/

我发现可以通过指定aapt -0 db 之类的内容来执行此操作,但我找不到有关如何编辑 ant 与 aapt 交互方式的信息。还是我必须自己运行 aapt ?我该怎么办?

【问题讨论】:

    标签: android ant assets aapt


    【解决方案1】:

    在构建时执行 AAPT 的是 Android 的 build.xml(您可以在 SDK、工具和 ant 下找到它)。

    找到您的 build.xml 并将“-package-resources”目标替换为以下目标。我很确定(目前无法对其进行测试)您可以在使用 ANT 构建时使用“-Dcompression.disabled=set”或在您的“compression.disabled=set”中打开和关闭压缩.properties 文件。

    <target name="-package-resources" depends="-crunch">
        <!-- only package resources if *not* a library project -->
        <do-only-if-not-library elseText="Library project: do not package resources..." >
            <aapt executable="${aapt}"
                    command="package"
                    versioncode="${version.code}"
                    versionname="${version.name}"
                    debug="${build.is.packaging.debug}"
                    manifest="AndroidManifest.xml"
                    assets="${asset.absolute.dir}"
                    androidjar="${android.jar}"
                    apkfolder="${out.absolute.dir}"
                    nocrunch="${build.packaging.nocrunch}"
                    resourcefilename="${resource.package.file.name}"
                    resourcefilter="${aapt.resource.filter}"
                    projectLibrariesResName="project.libraries.res"
                    projectLibrariesPackageName="project.libraries.package"
                    previousBuildType="${build.last.target}"
                    buildType="${build.target}">
                <res path="${out.res.absolute.dir}" />
                <res path="${resource.absolute.dir}" />
                <if>
                    <condition>
                        <isset property="compression.disabled" />
                    </condition>
                    <then>
                        <nocompress/>
                    </then>
                </if>
            </aapt>
        </do-only-if-not-library>
    </target>
    

    【讨论】:

    • 谢谢;我最终没有走这条路,因为它会使 apk 变得巨大,但无论如何我很高兴知道答案。
    • 好的!您也可以通过向 nocompress-element 添加扩展属性来使其成为每个文件类型。 &lt;!-- Only .db files --&gt; &lt;then&gt; &lt;nocompress extension="db"/&gt; &lt;/then&gt;
    • 有没有人在不修改android sdk内部文件的情况下找到了方法?
    • 您无需修改​​ Android sdk 内部文件 - 而是将规则添加到您自己项目中的 build.xml 文件中
    • 感谢 Sveinung Kval Bakken 的回答,但对于像我这样不熟悉 ant 的人来说,这还不够。对于其他人:您想从 android_sdk_dir/tools/ant/build.xml 复制 &lt;target name="-package-resources"...&gt;...&lt;/target&gt; 并将其粘贴到项目目录中的 build.xml 中 &lt;import file="${sdk.dir}/tools/ant/build.xml" /&gt; 之前,然后修改 &lt;nocompress extension="..." /&gt; 的行查看评论在您的项目 build.xml 结尾处获取指导。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2013-02-20
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    相关资源
    最近更新 更多