0

好吧,我知道标题写得不好,但我的情况就是这么复杂!我在这里搜索了这个案例,但其他类似的问题确实与我的不同。

这是我的问题:

  • 我编写了一个 Android 程序,它显示存储在“assets”文件夹中的内容(原始格式的文本、图像等)。现在我想将此应用程序与一个 Windows 应用程序(也是我编写的)一起交付给最终用户,这让他们可以将内容添加到 apk 文件的“资产”文件夹,并使用他们想要的名称输出修改后的 apk(出现在他们的电话)。

现在什么是最好的解决方案,我应该使用哪些工具和命令?我的意思是我应该在我的软件中包含哪些工具(aapt、jarsigner、...)以及我的软件必须启动哪些命令才能执行此操作?

关于我的案例的更多信息:

  • 我的用户不高级,对 Android 编程和修改 apk 一无所知,我希望他们只使用我的客户端 windows 应用程序。
  • 我不想在客户端机器上使用 JDK、JRE、...。
  • 修改过程包括:替换AndroidManifest.xmldrawable\icon.png并在 assets 文件夹中添加一些文件。
  • 我将分发我的密钥库文件和未签名的原始 apk 文件以及我的软件,以便在流程结束时进行签名。

PS: 好的,几个小时后,我几乎在 9 个步骤中找到了解决方案,并获得了最终的自定义签名 zip 对齐的 apk 文件并安装在设备上而没有错误!但现在的问题是:我的用户生成的所有 apk 文件都将具有相同的包名称(com.MyName.MyApp),如果有人在他们的手机上安装了 2 个或更多,则会导致问题。我应该为这个问题尝试“aapt --rename-manifest-package”吗?以及如何使用它?

4

1 回答 1

4

我终于得到了这个可行的解决方案,我把它放在这里给任何有兴趣的人。

1-将“original.apk”(source.apk)提取到临时文件夹(即TempFolder)

2- 将用户生成的文件放在 TempFolder 下的“assets”和“res\drawable”文件夹中

3- 生成 AndroidManifest.xml 并放入 TempFolder

4-运行这个命令: aapt package -f -M "PathToManifest" -S "PathToResFolder" -I android.jar -F "NearlyFinal.apk" -A "PathToAssetsFolder"

5-将“classes.dex”复制到 NearlyFinal.apk 所在的文件夹。

6-运行这个命令:aapt add -f NearlyFinal.apk classes.dex jad.properties

7-签署apk文件:jarsigner -storepass [keystorePass] -keystore KeyStoreFile.key NearlyFinal.apk [KeyStoreName]

8- zipalign apk 文件:zipalign 4 NearlyFinal.apk "Final.apk"

9-根据用户的偏好重命名和移动 Final.apk。

结束

于 2012-08-29T15:28:52.617 回答