这可能是一个完整的“禁忌”,但我想知道在将应用程序签名并编译成apk后是否可以使应用程序可调试。
我希望能够在我的服务器上生成随机密钥,然后使用此密钥将我发布的应用程序置于可调试状态。
//Build a hidden back door to request the randomly generated key on my server
//Input this key into an edittext box of some sort.
//Check this key against the server
//If key validates, put application in debuggable state.
我意识到这样做会带来潜在的安全隐患,但我只是想知道它是否可能。
答案 0 :(得分:1)
如果您愿意重新签名并重新安装,从非可调试的APK生成可调试的APK是相当简单的,但您不能对已安装的实例执行此操作。
实际代码中基于可调试/不可调试状态行为不同的任何内容也可能会看到其他内容,正如Brent建议的那样,但由于大多数调试功能内置于Android中,而不是部分内容,因此用途有限。应用程序代码。
您可以为调试功能提供标志可能的替代方案。例如,您可以提供将私有文件复制到公共存储的内容。如果你真的想要,你可以在服务器中烘焙,提供一个运行为应用程序UID的shell。但是获得一个真正的JDWP调试器可能需要极端的,依赖于android-build的hackery,因为你可能需要提供自己版本的大量系统代码。
简单来说,让程序通过记录大量通常被抑制的内部细节来改变其行为将非常简单。
请花一些时间考虑用户的安全隐患。
答案 1 :(得分:0)
通过开发站点,我看到通过从给定的上下文调用getApplicationInfo().flags;
来访问标志。 flags
不是final
,因此getApplicationInfo.flags |= FLAG_DEBUGGABLE;
似乎允许您在运行时启用调试:引用ApplicationInfo
doc:http://developer.android.com/reference/android/content/pm/ApplicationInfo.html。
注意,我没有测试过这个(不是通过momemnt的android环境)。