`
niyanshi
  • 浏览: 20111 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android程序编译时更改包名

 
阅读更多

Android项目开发中有时候需要改动apk的包名,比如希望能同时安装测试/debug版本和正式版。比较容易的方法是在eclipse中右键点击项目,选择Android Tools->Rename Application Package。但是这样做比较麻烦,实际上我们也可以通过build脚本在打包时修改包名,方法如下。

 

  1. ant, 在build.xml中加入下面一段
<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"
                    manifestpackage="your pakcage name"
                    versioncode="${version.code}"
                    versionname="${version.name}"
                    debug="${build.is.packaging.debug}"
                    manifest="${out.manifest.abs.file}"
                    assets="${asset.absolute.dir}"
                    androidjar="${project.target.android.jar}"
                    apkfolder="${out.absolute.dir}"
                    nocrunch="${build.packaging.nocrunch}"
                    resourcefilename="${resource.package.file.name}"
                    resourcefilter="${aapt.resource.filter}"
                    libraryResFolderPathRefid="project.library.res.folder.path"
                    libraryPackagesRefid="project.library.packages"
                    libraryRFileRefid="project.library.bin.r.file.path"
                    previousBuildType="${build.last.target}"
                    buildType="${build.target}"
                    ignoreAssets="${aapt.ignore.assets}">
                <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>

 

2. maven,在maven的build插件中加入下面一句

<plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <version>3.6.0</version>
    ...
    <configuration>
        ...
        <renameManifestPackage>com.napa.bluelion.reading.xzhz</renameManifestPackage>
        ....
    </configuration>
    ...
</plugin>

 

 3.   gradle, gradle已经考虑了我们这点需求,可以直接为测试和正式版打出两个不同包名的Apk

       可以直接在android default config中指定包名

       

android {
    compileSdkVersion 15

    defaultConfig {
        ...
        packageName: your package name
        testPackageName: your test package name
    }
}

 

也可以指定不同的productFlavors

android {
    ...

    defaultConfig {
        minSdkVersion 8
        versionCode 3001
    }

    productFlavors {
        flavor1 {
            versionCode 3001
            packageName: your packageName0
        }

        flavor2 {
            minSdkVersion 2500
            packageName: your package name1
        }
    }
}

 

 

注意事项。有时我们会在代码中通过如下方式动态获取资源文件的id来加载资源文件。

int resId = getResources().getIdentifier(resName, "drawable", getPackageName());

 这里的getPackageName会在编辑java代码时被编辑成Manifest文件中指定的package名字,导致我们在打包是改了包名以后出现运行时错误,找不到对应的资源文件。这时我们需要通过下面的方式在运行时动态获取pacakge name。

String packageName = getResources().getResourcePackageName(R.string.app_name);//这里的R.string.app_name是一个已经存在的资源。

int resId = getResources().getIdentifier(resName, "drawable", packageName);

 

 

原理:应用的包名其实不同于java代码的package名字。他实际上是appt工具在把资源文件编译成二进制时候用来生成资源的唯一标识用的。aapt在打包资源的时候会读取manifest文件中的包名来生成资源标识。所以以上的修改方式也就是通过在编译打包时指定package名字实现的。

0
0
分享到:
评论

相关推荐

    android程序编译打包工具

    本文将深入探讨“Android程序编译打包工具”的使用,包括资源文件的修改和重新打包。 首先,Android应用程序的核心编译过程涉及Java源代码的转换。开发者通常使用Android Studio,这是一个基于IntelliJ IDEA的集成...

    Android反编译工具包(最完整的Android反编译工具包)

    标题中的“Android反编译工具包(最完整的Android反编译工具包)”表明这是一个集合了多种工具的资源包,用于帮助开发者和安全研究人员进行APK的反编译工作。 首先,让我们来了解一下反编译的基本概念。反编译是将已...

    安卓包名修改工具,可修改包名反编译

    2. 修改包名:在反编译后的源代码中,我们需要找到并替换所有出现的旧包名,包括AndroidManifest.xml中的包名、R类文件、以及Smali代码中的引用。 3. 重打包:修改完成后,使用工具将源代码重新打包成APK,这通常...

    Android反编译工具包.rar

    在Android开发领域,有时我们需要对APK应用进行...总的来说,Android反编译工具包是Android开发者和安全研究者的宝贵资源,能帮助他们深入了解APK的内部运作,提高开发和调试效率,同时也有助于提升应用程序的安全性。

    Android动态编译需要的包

    动态编译主要是指在运行时对代码进行编译,而不是在应用程序安装时一次性完成。这能让我们在不重新发布应用的情况下修改和优化代码。而Smali是Android平台下Dalvik虚拟机的汇编语言,用于反编译和编译DEX文件。本文...

    android反编译工具

    这些工具可以帮助开发者、安全研究人员或者逆向工程师理解已编译的Android应用程序的工作原理。下面我们将详细探讨一些常用的Android反编译工具及其应用。 1. **Apktool**:Apktool是最常见的Android反编译工具之一...

    Android反编译工具包

    反编译是将已编译的二进制代码转换回源代码的过程,这对于理解和修改已有的应用程序非常有用。在Android环境中,APK文件是一个包含Android应用所有组件的压缩包,包括.dex(Dalvik Executable)文件,这是Java字节码...

    android反编译,二次打包一套工具

    在Android开发领域,有时我们需要对已有的APK文件进行反编译和二次打包,以便于研究其内部结构、修改代码或资源,甚至实现定制化的需求。"android反编译,二次打包一套工具"是一个集合了相关工具的压缩包,主要包含...

    android反编译资源获取

    APKTool是这个过程中常用的一款工具,它允许开发者解包、反编译、修改和重新打包Android应用程序。 首先,APKTool是一款开源的Android反编译工具,由Izzy(Igor Zordan)开发。它的主要功能包括将APK文件反编译为...

    android反编译工具包(MAC和Windows)

    本压缩包提供了适用于MAC OS X和Windows操作系统的Android反编译工具包,包含了三个关键的工具:Apktool、dex2jar和JD-GUI,它们是Android应用反编译流程中的重要环节。 首先,Apktool是Android应用反编译过程中最...

    AndroidKiller (Android反编译工具)

    这些是Delphi编程语言的库文件,`AKCommon.bpl`可能包含了`AndroidKiller`的通用函数和类,而`rtl230.bpl`和`vcl230.bpl`分别代表运行时库和Visual Component Library,为应用程序提供基础支持和服务。 - **lua5.3.0...

    Android 反编译工具包

    本篇将详细介绍"Android反编译工具包"中的三个核心工具:Apktool、dex2jar和JD-GUI,以及它们在Android应用分析中的作用。 首先,让我们来了解一下**Apktool**。Apktool是一款强大的Android资源反编译工具,由Izzy ...

    修改apk包名

    3. **修改包名**:打开解压后的AndroidManifest.xml文件,找到`&lt;manifest&gt;`标签,其中的`package`属性就是APK的包名。修改这个值,例如将`com.example.myapp`改为`com.example.newapp`。 4. **更新依赖**:如果应用...

    android反编译xml、layout

    在Android应用开发中,APK是应用程序的二进制包,包含了代码、资源文件和配置信息。当开发者希望深入理解已有的APK或者对它进行逆向工程时,就需要使用到像`apktool`这样的工具。`apktool`是一个开源的Android反编译...

Global site tag (gtag.js) - Google Analytics