重命名APK中的包名称

时间:2012-02-09 20:57:07

标签: android package rename

我创建了一个目前在市场上的 AIR应用。要更新应用程序,显然我必须保留相同的包名称。我的第一个版本是使用 Eclipse 和ADT插件打包的。

现在使用 AIR 3.0 Native Extensions (ANE),这是我第一次开发应用时无法使用的,我目前必须使用AIR的命令行工具创建我的APK。不幸的是,这些命令行工具会强制您使用以“air”开头的包名。例如,我需要包名“com.example”。 AIR将包名称创建为“air.com.example”。

现在,由于软件包名称已更改,我无法在市场中更新我的应用程序。 Adobe有这篇可怕的文章来帮助你重命名和删除包中的“空气”。我不是一个优秀的程序员,所以这真的让我难过。 http://kb2.adobe.com/cps/875/cpsid_87562.html

显然,这些信息在某些方面已经过时或不正确。 我完全无意中发现了使用 apkbuilder

的第12步
 apkbuilder final.apk -u -z resources.arsc -f classes.dex

我收到此错误消息:

此工具已被弃用。有关更多信息,请参阅--help。 java.io.FileNotFoundException: resources.arsc 不存在

我已使用第10步创建新的 resources.arsc 文件。它显然存在并且位于正确的位置。我尝试使用apkbuilder与其他resources.arsc文件从其他项目中获取。我仍然收到相同的错误消息。

这种工作有可能吗?如果有人对此感兴趣,我有一个带有示例AIR apk的zip文件,所有命令行工作的windows bat文件,以及所有需要的实用程序,因此不需要下载它们。要开始,您只需要更改我的path.bat以适合您的系统。并且您需要notepad ++(或等效的)来批量自动重命名几个文件中的包名称。 bradwallacedesign.com/dktimer/renameApkProject.zip

非常感谢!

4 个答案:

答案 0 :(得分:9)

这是在电脑上完成的。我不知道如何在Mac上执行此操作。

我不建议使用它来移除“空气”。从航空包名称。如果这样做,将不会提示用户在其设备上下载空气。用户将收到错误消息,而不知道问题的线索。当然,您可以使用空中捕获运行时来解决此问题。

http://bradwallacedesign.com/share/renameAPK.zip

下载并解压缩我的文件(renameAPK.zip)到c:\ renameAPK。

所需文件:

  1. 我的文件(renameAPK.zip),其中包含apkTool
  2. java jdk / jre
  3. android SDK
  4. notepad ++(或可以跨多个文件重命名的等效文本编辑器)
  5. 我制作了很多蝙蝠文件,因为我不确定如何将它们组合成一个文件。您需要编辑每个更改路径名和文件名以使用您的计算机和apk文件。

    我按照我使用它们的顺序编号所有蝙蝠。一旦命令行打开,我输入我想要的bat文件的编号,然后按Tab键自动完成bat文件的名称,然后按Enter键运行该bat文件。

    操作的指令:

    双击`openCmd.bat 打开一个指向包含所有文件的目录的命令行。

    0。运行 0path.bat 来设置路径。 (我现在不记得是否需要adobe air sdk,但是我已经把它放在我的路径上了。很明显,JDK是需要的,我认为是jarsigner和zip对齐的android sdk。)

    1。运行 1decompileAPK.bat 让apkTool将您的应用反编译为名为UNZIPPEDapk的文件夹

    2。按照 2editManifest& PackageName - 使用UNZIPPEDapk中的Notepad ++编辑清单和包名称的说明(不是蝙蝠).txt

    编辑AndroidManifest.xml:

    a。将包名称从air.oldPackageName更改为newPackageName

    b。编辑其他所需条目:    

    c。重命名“smali”文件夹中的文件夹系统,以便它可以与您的新包名一起使用    例如:       如果旧包名是:air / oldName然后更改文件夹以匹配新包名:air / newName

    使用 notepad ++ (或任何可以在许多文件中查找和替换文字的编辑器)


    d。 ctrl + shift + f ---“在文件中查找”

      find:
    air/oldPackageName
      replace with:
    newPackageName
      where:
    all files in UNZIPPEDapk/smali
    

    (我认为有200多个替代品)

    3. 运行 3buildDistFolder.bat 让apkTool在UNZIPPEDapk \ Dist文件夹中构建新的apk

    4. 按照 4getMissingFiles - instructions.txt 中的说明恢复新版本中的2个丢失文件:

    a。 3buildDistFolder期间未构建两个文件:

    3buildDistFolder.bat在\ UNZIPPEDapk \ dist文件夹中构建了新的apk,但无法复制2个文件:

    (skipping hidden file 'C:\Users\computer\apkTool\UNZIPPEDapk\assets\META-INF
    

    \ AIR \扩展\ com.adobe.mobile \ META-INF \ ANE \ Android的ARM.classpath')     (跳过隐藏文件'C:\ Users \ computer \ apkTool \ UNZIPPEDapk \ assets \ META-INF \ AIR \扩展\ com.adobe.mobile \ META-INF \ ANE \ Android的ARM.project')

    从原始apk中获取这两个文件,然后将它们放入正确文件夹中的新apk中

    b。将您的App.apk从DKTimer / Dist /复制到您的bat文件所在的根目录。

    5. 运行 5signAPK.bat 以对apk进行签名。

    developer.android.com/guide/publishing/app-signing.html

    6。运行 6verifySigned.bat 以验证签名是否正常工作

    7。运行 7zipAlign.bat 以对齐apk文件。

    developer.android.com/guide/developing/tools/zipalign.html


    你已经完成了这一点。如果要在设备上进行测试,请继续。

    8. 运行 8installAPK.bat ,以便在连接usb的设备上安装apk。

    9。如果您想使用远程调试,请运行 9remoteDebugger.bat


    我希望这有助于某人。如果我忘记包含某些内容,请告诉我。 另外,如果您知道更好的方法,请发表评论(例如如何将其合并为1个长暂停的bat文件......)

答案 1 :(得分:6)

您可以设置一个简单的环境变量来轻松禁用air.前缀。 Adobe AIR包装程序中存在以下代码:

String optOut = System.getenv("AIR_NOANDROIDFLAIR");
if ((optOut == null) || (optOut.indexOf("true") == -1)) {
  packageName = "air." + packageName;
}

因此,只需将AIR_NOANDROIDFLAIR环境变量设置为true,重新打包您的应用程序,它就不会拥有air.前缀。 Google如何在windowsmac中为您的特定操作系统版本设置环境变量。

例如,我在Mac / Linux上使用命令行编译器,所以我运行:

> export AIR_NOANDROIDFLAIR=true
> java -jar $AIR_HOME/lib/adt.jar -package -target apk-captive-runtime -storetype pkcs12 -keystore cert.p12 -storepass *** Main.apk Main-app.xml Main.swf

警告:我不知道这有什么影响。根据上面的某个人的注意事项,这可能只是强制运行时的一个好主意(但这是AIR 3.8的默认设置)。

更新: Renaun Erickson said它不应该导致问题。

交叉发布here(略有不同的问题,相同的答案)。

答案 2 :(得分:5)

尝试了几个apkRename工具,我发现它们都失败了一些应用程序,例如HTC设备上的com.android.browser。

原因是在apktool中有时无法正确解压apk文件。


所以,我创建了自己的工具:https://github.com/sjitech/ApkRename 不需要apktool,不需要aapt,只需java和jar实用程序。 该实用程序直接修改AndroidManifest.xml,因此无需通过apktool重新编译整个资源, 所以它很干净。

经测试的设备:11种(android 4+,但2.2+应该不行) 测试操作系统:Mac OS X 10.9和CentOS 6.(带有bash 4+的Cygwin应该没问题,但尚未测试)

答案 3 :(得分:1)

我实际上尝试过brad的方法,无法想象我每次编译一个版本都要经历这个过程。所以我做了别的事......我修改了ADT,所以不插入“空气”。在开始时用一个更有用的扩展名替换它,比如“com。”

以下是该方法的摘要:

使用: jar xf adt.jar

将adt.jar文件解压缩到桌面上的目录。你会在{adobe SDK} / lib /

中找到它

查找文件APKOutputStream.class

com / adobe / air / apk / APKOutputStream.class

在十六进制编辑器中打开它(例如,HxD就是我使用的)。搜索“空气”。 (没有引号但包括点)。

请勿删除该条目。我试过,你不能,它会腐蚀这个课程,它不会运行。但是,你能做的就是取代“空气”。与“com。”因为它具有相同数量的字符,并且不会弄乱文件的长度。 com前缀对我们大多数人来说更有用。

使用JAR保存修改后的APKOutputStream.class文件和重新打包。像这样的东西:

jar cfm .. \ patchedadt.jar .. \ MANIFEST.MF *

你想要从名为META-INF的包的子目录中复制那个MANIFEST.MF文件

将patchedadt.jar重命名为adt.jar并将其放回lib目录中。适用于Flash Builder和所有服装。

毋庸置疑,当你在那里时,你会想要在没有“com”的情况下制作你的包裹。前缀,所以你最终不会得到com.com.your.package.name。

也许有一种更简单的方法,但我不知道更好,没有其他人有答案,除了反编译apk,修改它,重新编译,甚至没有工作。所以我想我会分享我所做的事情以防万一其他人偶然发现它:)

吉姆