Android应用程序ID前缀问题

Android应用程序ID前缀问题,android,actionscript-3,air,adobe,adt,Android,Actionscript 3,Air,Adobe,Adt,我正在构建一个AdobeAIR for Android应用程序,我有一个大问题,我使用一个旧的flash Air扩展将一个应用程序发布到Android market,该扩展程序使用前缀“App”保存了应用程序id 现在我已经升级了扩展,它现在用前缀“air”保存应用程序id 这意味着我不能再发布应用程序的更新;那我该怎么办 使用过期扩展名的问题是,发布更新后,用户无法打开应用程序,直到清除缓存文件。如果其他人需要,我将发布带有此问题的结果。 总而言之,虽然我讨厌说只是重新发布你的应用程序作为一个

我正在构建一个AdobeAIR for Android应用程序,我有一个大问题,我使用一个旧的flash Air扩展将一个应用程序发布到Android market,该扩展程序使用前缀“App”保存了应用程序id

现在我已经升级了扩展,它现在用前缀“air”保存应用程序id

这意味着我不能再发布应用程序的更新;那我该怎么办


使用过期扩展名的问题是,发布更新后,用户无法打开应用程序,直到清除缓存文件。

如果其他人需要,我将发布带有此问题的结果。 总而言之,虽然我讨厌说只是重新发布你的应用程序作为一个新的应用程序

我发现这篇文章展示了如何分解已经编译好的应用程序,更改应用程序前缀并重新编译它

现在我必须告诉你,这对我不起作用。我一直走到最后一步,在重新打包的应用程序上签名,然后上传到市场。我遇到的问题是,最初的应用程序是用AdobeFlashCS5创建的mycert.p12进行签名的。jarsigner(你用来为应用程序签名的东西)不会使用此证书,它说它的格式错误。不要尝试创建新的证书b/c android market只允许您使用原始证书更新应用程序,我一开始并不知道这一点。好的,然后我发现如果右键单击证书(windows vista),顶部选项会将证书安装为不同的文件,然后可以从MMC(转到MMC中的开始-运行-键入)导出到jarsigner允许的格式。应用程序已签名,我已上载到市场-错误证书不包含私钥。。。否认。如果你使用keytool-list查看证书,它显示了一个序列号、一个md5和aes密钥,我会认为其中一个是私钥。我从来没有找到一种方法,以市场允许的方式签署该应用程序。我已经重新发布了这个应用程序,我正在慢慢地迁移我的客户,在他们购买了新的应用程序后,我会退款给他们

经验教训:不断更新您的扩展。最重要的是将你的证书文件备份到很多地方。如果你松开它,你将不会再次更新你发布的应用,至少我发现是这样

这是我研究这个话题的论坛帖子。

关于市场,我学到的最后一件事。没有办法将你的应用程序作为促销品分发出去。他们必须购买它。如果您向客户退款,客户应用程序可能会被删除。不过,我发现关于这件事有几个相互矛盾的故事


如果你还想潜水,祝你好运

有一个简单的环境变量可以设置为禁用
air。
前缀。Adobe AIR packager中存在以下代码:

String optOut = System.getenv("AIR_NOANDROIDFLAIR");
if ((optOut == null) || (optOut.indexOf("true") == -1)) {
  packageName = "air." + packageName;
}
因此,只需将
AIR\u NOANDROIDFLAIR
环境变量设置为
true
,重新打包应用程序,它就不会有
AIR.
前缀。Google如何在特定操作系统版本中或为特定操作系统版本设置环境变量

例如,我在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
警告:我不知道这有什么影响。根据上面某人的注释,这可能只是一个好主意,用于captive runtime(但这是AIR 3.8的默认版本)

更新:Renaun Erickson此标志不应引起问题


交叉张贴(问题略有不同,答案相同)。

最近我做了这个,下面是我的结果。
在AIR SDK 15、Mac OSX 10.10 Yosemite上测试并运行良好。windows也应该同样工作

查看adt.jar中的所有选项

java -jar $AIR_HOME/lib/adt.jar -help
要包含电子邮件文件,请添加
-extdir

export AIR_NOANDROIDFLAIR=true
java -jar /FULL_PATH_TO_AIR_SDK/lib/adt.jar -package -target apk-captive-runtime -storetype pkcs12 -keystore <DEVELOPER>.p12 -storepass <PASSWORD> Main.apk Main-app.xml Main.swf -extdir /PATH_TO_ANE_DIRECTORY
例如

java -jar /Users/cforcloud/AIR_SDK/lib/adt.jar -package -target apk-captive-runtime -storetype jks -keystore /Users/cforcloud/android.keystore -storepass secretPassword Main.apk Main-app.xml Main.swf -extdir /Users/cforcloud/ane_directory
为和查找更多此类选项


感谢@JeffWard

您是如何发现Adobe AIR packager源代码包含引用“AIR_NOANDROIDFLAIR”环境变量的行的?据我所知,它只有二进制形式,没有源代码。此外,我递归地对整个AIRSDK目录进行了灰色处理,而该字符串在纯文本形式的任何地方都找不到。
java -jar /Users/cforcloud/AIR_SDK/lib/adt.jar -package -target apk-captive-runtime -storetype jks -keystore /Users/cforcloud/android.keystore -storepass secretPassword Main.apk Main-app.xml Main.swf -extdir /Users/cforcloud/ane_directory