使APK具有唯一的ID,而无需编译

时间:2019-01-08 20:38:31

标签: android testing apk

有这样的问题:

1)我必须使用我们的发行服务将新版本的应用程序提供给测试人员(无法使用HockeyApp等)

2)我想为每个测试人员提供唯一的APK文件。但是我无法为每个新版本的应用程序编译〜3000 APK文件。

所以我想在不重新编译的情况下向APK文件添加某种ID。

(我需要它来确定是否某些用户会在未经我许可的情况下在网络上的某个位置共享此APK文件)

示例:

用户从我的网站下载.apk文件=>上载到某个论坛/网站=>我看到有人在网络上共享了我的应用程序=>我从该论坛/网站下载了apk =>我确定,谁共享了它(通过apk的唯一ID)

2 个答案:

答案 0 :(得分:0)

这并非易事,因为APK的所有文件都被签名覆盖,因此您添加的任何内容都必须位于其他位置。

您可以尝试修改APK的zip注释(如果您可以找到允许您执行此操作的库-也许是“ apkzlib”),则不确定该部分是否包含签名。

或者,您可以尝试将文件添加到zip中央目录中未引用的APK(某种程度上是“ ghost文件”,大多数zip工具都不存在),也许签名不存在涵盖其中任何一个,但我尚未验证。此解决方案还需要对zip格式有充分的了解才能实现。

还请注意,如果可以在不触摸签名的情况下完成此操作,那么也可以在不触摸签名的情况下将其删除...因此,如果您的测试人员发现了此问题,则可以将其删除。但是我想这并不是一件容易的事,所以这可能就足够了。

答案 1 :(得分:0)

有两个约束:

幸运的是,仅需几秒钟即可签署apk,并且对于3k apk来说应该是可行的。

因此,您可以编写一个脚本,将ID写入akp中的文件(基本上是.zip文件),然后对其进行签名。参见Can I re-sign an .apk with a different certificate than what it came with?

有关如何从命令行签名的信息,请参见https://developer.android.com/studio/publish/app-signing#sign-manually