我创建了一个目前在市场上的 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
非常感谢!
答案 0 :(得分:9)
我不建议使用它来移除“空气”。从航空包名称。如果这样做,将不会提示用户在其设备上下载空气。用户将收到错误消息,而不知道问题的线索。当然,您可以使用空中捕获运行时来解决此问题。
http://bradwallacedesign.com/share/renameAPK.zip
下载并解压缩我的文件(renameAPK.zip)到c:\ renameAPK。
我制作了很多蝙蝠文件,因为我不确定如何将它们组合成一个文件。您需要编辑每个更改路径名和文件名以使用您的计算机和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如何在windows或mac中为您的特定操作系统版本设置环境变量。
例如,我在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,修改它,重新编译,甚至没有工作。所以我想我会分享我所做的事情以防万一其他人偶然发现它:)
吉姆