Android项目开发中有时候需要改动apk的包名,比如希望能同时安装测试/debug版本和正式版。比较容易的方法是在eclipse中右键点击项目,选择Android Tools->Rename Application Package。但是这样做比较麻烦,实际上我们也可以通过build脚本在打包时修改包名,方法如下。
- 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名字实现的。
相关推荐
本文将深入探讨“Android程序编译打包工具”的使用,包括资源文件的修改和重新打包。 首先,Android应用程序的核心编译过程涉及Java源代码的转换。开发者通常使用Android Studio,这是一个基于IntelliJ IDEA的集成...
标题中的“Android反编译工具包(最完整的Android反编译工具包)”表明这是一个集合了多种工具的资源包,用于帮助开发者和安全研究人员进行APK的反编译工作。 首先,让我们来了解一下反编译的基本概念。反编译是将已...
2. 修改包名:在反编译后的源代码中,我们需要找到并替换所有出现的旧包名,包括AndroidManifest.xml中的包名、R类文件、以及Smali代码中的引用。 3. 重打包:修改完成后,使用工具将源代码重新打包成APK,这通常...
在Android开发领域,有时我们需要对APK应用进行...总的来说,Android反编译工具包是Android开发者和安全研究者的宝贵资源,能帮助他们深入了解APK的内部运作,提高开发和调试效率,同时也有助于提升应用程序的安全性。
动态编译主要是指在运行时对代码进行编译,而不是在应用程序安装时一次性完成。这能让我们在不重新发布应用的情况下修改和优化代码。而Smali是Android平台下Dalvik虚拟机的汇编语言,用于反编译和编译DEX文件。本文...
这些工具可以帮助开发者、安全研究人员或者逆向工程师理解已编译的Android应用程序的工作原理。下面我们将详细探讨一些常用的Android反编译工具及其应用。 1. **Apktool**:Apktool是最常见的Android反编译工具之一...
反编译是将已编译的二进制代码转换回源代码的过程,这对于理解和修改已有的应用程序非常有用。在Android环境中,APK文件是一个包含Android应用所有组件的压缩包,包括.dex(Dalvik Executable)文件,这是Java字节码...
在Android开发领域,有时我们需要对已有的APK文件进行反编译和二次打包,以便于研究其内部结构、修改代码或资源,甚至实现定制化的需求。"android反编译,二次打包一套工具"是一个集合了相关工具的压缩包,主要包含...
APKTool是这个过程中常用的一款工具,它允许开发者解包、反编译、修改和重新打包Android应用程序。 首先,APKTool是一款开源的Android反编译工具,由Izzy(Igor Zordan)开发。它的主要功能包括将APK文件反编译为...
本压缩包提供了适用于MAC OS X和Windows操作系统的Android反编译工具包,包含了三个关键的工具:Apktool、dex2jar和JD-GUI,它们是Android应用反编译流程中的重要环节。 首先,Apktool是Android应用反编译过程中最...
这些是Delphi编程语言的库文件,`AKCommon.bpl`可能包含了`AndroidKiller`的通用函数和类,而`rtl230.bpl`和`vcl230.bpl`分别代表运行时库和Visual Component Library,为应用程序提供基础支持和服务。 - **lua5.3.0...
本篇将详细介绍"Android反编译工具包"中的三个核心工具:Apktool、dex2jar和JD-GUI,以及它们在Android应用分析中的作用。 首先,让我们来了解一下**Apktool**。Apktool是一款强大的Android资源反编译工具,由Izzy ...
3. **修改包名**:打开解压后的AndroidManifest.xml文件,找到`<manifest>`标签,其中的`package`属性就是APK的包名。修改这个值,例如将`com.example.myapp`改为`com.example.newapp`。 4. **更新依赖**:如果应用...
在Android应用开发中,APK是应用程序的二进制包,包含了代码、资源文件和配置信息。当开发者希望深入理解已有的APK或者对它进行逆向工程时,就需要使用到像`apktool`这样的工具。`apktool`是一个开源的Android反编译...