在自定义 Ant 构建步骤中更改应用程序包名称 [英] Changing application package name in custom Ant build step

查看:24
本文介绍了在自定义 Ant 构建步骤中更改应用程序包名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用自定义构建来重新打包我的 Android 应用程序.我想创建一个内部测试版,可以与我的生产应用并行安装.

I'm trying to use a custom build to repackage my Android app. I want to create an internal beta version which I can install side-by-side with my production app.

这个答案看起来正是我需要的,但它似乎不起作用.

This answer looks like exactly what I need, however it doesn't seem to work.

这是我的 build.xml 的更新:

Here's the update to my build.xml:

<target
    name="-package-resources"
    depends="-crunch" >

    <echo>Repackaging AndroidManifest.xml to ${package.manifest.name} ${out.absolute.dir}/${resource.package.file.name}</echo>

    <exec executable="${aapt}" failonerror="true">
        <arg value="package" />
        <arg value="-f" />
        <arg value="--auto-add-overlay" />
        <arg value="-M" />
        <arg path="AndroidManifest.xml" />
        <arg value="-S" />
        <arg path="${resource.absolute.dir}" />
        <arg value="-S" />
        <arg path="${android.library.reference.1}/res" />
        <arg value="-A" />
        <arg path="${asset.absolute.dir}" />
        <arg value="-I" />
        <arg path="${project.target.android.jar}" />
        <arg value="-F" />
        <arg path="${out.absolute.dir}/${resource.package.file.name}" />
        <arg value="--rename-manifest-package" />
        <arg value="${package.manifest.name}" />
    </exec>
</target>

运行它似乎成功运行我的新代码:

Running it seems to successfully run my new code:

ant debug -Dpackage.manifest.name=com.example.test    
...    
 -package-resources:    
      [echo] Repackaging AndroidManifest.xml to com.example.test /<mypath>/bin/<appname>.ap_
...    
BUILD SUCCESSFUL

但是,当我使用 APKTool 检查 APK 时,包名称在我的 AndroidManifest 中没有更改为新值.似乎发生的一切都是我的相对活动路径.MyActivity"已扩展为我的原始包名称.

However, when I use APKTool to inspect the APK, the package name in my AndroidManifest has not been changed to the new value. All that seems to have happened is that my relative activity paths ".MyActivity" have been expanded to my original package name.

apktool d --force bin/<appname>-debug.apk

有人知道我做错了什么吗?我已经查看了所有其他 Stackoverflow 的答案,大多数似乎都有些过时了.我正在使用 Android SDK 工具修订版 21.1.0,为 minSdkVersion 8 构建.

Does anybody know what I'm doing wrong? I've looked at all the other Stackoverflow answers and most seem a little out of date. I am building with Android SDK Tools Revision 21.1.0, for minSdkVersion 8.

更新:正如@a​​thor 在他的回答下面评论的那样,我关于检查 AndroidManifest.xml 的假设是错误的.要对此进行测试,您实际上需要尝试安装它而不是查看反编译的 XML!

Update: As @athor comments below his answer, my assumption about inspecting the AndroidManifest.xml is wrong. To test this you actually need to try installing it rather than viewing the decompiled XML!

推荐答案

这就是我的工作方式(工作)

This is the way I do it (working)

 <target
        name="-package-resources"
        depends="-crunch" >

        <!-- only package resources if *not* a library project -->

        <echo message="Current Package name: ${app.custompackagename}" />

        <do-only-if-not-library elseText="Library project: do not package resources..." >

            <aapt
                androidjar="${project.target.android.jar}"
                apkfolder="${out.absolute.dir}"
                assets="${asset.absolute.dir}"
                buildType="${build.target}"
                command="package"
                debug="${build.is.packaging.debug}"
                executable="${aapt}"
                ignoreAssets="${aapt.ignore.assets}"
                libraryPackagesRefid="project.library.packages"
                libraryRFileRefid="project.library.bin.r.file.path"
                libraryResFolderPathRefid="project.library.res.folder.path"
                manifest="${out.manifest.abs.file}"
                manifestpackage="${app.custompackagename}"
                nocrunch="${build.packaging.nocrunch}"
                previousBuildType="${build.last.target}"
                resourcefilename="${resource.package.file.name}"
                resourcefilter="${aapt.resource.filter}"
                versioncode="${version.code}"
                versionname="${version.name}" >

                <res path="${out.res.absolute.dir}" />

                <res path="${resource.absolute.dir}" />
                <!-- <nocompress /> forces no compression on any files in assets or res/raw -->
                <!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw -->
            </aapt>
        </do-only-if-not-library>
    </target>

行 manifestpackage="${app.custompackagename}" 是关键.

The line manifestpackage="${app.custompackagename}" is the key.

这篇关于在自定义 Ant 构建步骤中更改应用程序包名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆