我的主要活动基本没用,没有其他活动(act2)。可以从主活动中的按钮访问act2。它也可以通过主屏幕小部件获得,当点击它时调用我的主要活动并立即调用act2。
现在,我已将其设置为在调用处理按钮单击的功能时检查许可证。这包括主活动中的按钮按下以及来自小部件的按钮。
我的问题是,这种情况经常发生吗?例如,获取缓存响应是否比检查变量更耗尽?
我已经尝试将它放在onCreate上,但是当它说它没有获得许可时,你可以关闭应用程序并再次打开它,它将不会再次运行onCreate。
答案 0 :(得分:7)
在这里,我假设您已阅读所有licensing documentation,并且您正在使用SDK。你没有说什么,所以我要去“默认”。 Android开发人员博客和互联网上都有一些线索。
我问自己the same question last year。或至少类似的东西。让我们一步一步:
我的问题是,这种情况经常发生吗?是 再次获得缓存响应 耗尽而不是检查变量 示例
我会说,差别将是“难以察觉”到“不多”。首先,有效时间戳(来自extras的VT
字段)存储在本地,正确加密/混淆。我假设你正在使用ServerManagedPolicy
政策,因为你什么也没说。
根据应用的类型,我们应该注意到您可能是writing things on onPause,例如(如果适用,检查更改,当然)。所以,我不担心。
但是因为没有明显的伤害并不意味着你应该做点什么。这就是为什么我不同意Kerin发布的内容:
我相信你会停止大量的盗版活动而且你根本不会浪费你的时间。
稍后会详细介绍。现在我说你不需要做很多检查。这就是政策的用途。他们处理它可能比你和我更好。别的什么都是浪费。就个人而言,我只对onCreate
(显然)进行检查,并且还在一个很少使用的情况下(但对应用有用性非常重要)。
然而,你应该做什么,我说因为没有人在这里说过,正确地混淆并改变了LVL库,以及你自己的代码端(checkerCallback
s)。在这里,我在LVL库上改变了很多东西,包括一些简单的单密钥加密(弱),还改变了接口的实现方式,以及如何传递参数等等。基本上,我在SO上发布了这个问题后创建了自己的LVL。
与您正在进行的操作相反,我还自定义了VT
字段,以便为缓存响应的有效性设置最短时间。这就是为什么我的应用程序将在野外使用,其中网络访问并不总是可用。这些微妙的细节取决于您的应用程序,它的作用,它是如何做的,人们会在哪里使用它们。
如果您是开发人员,很容易忘记用户。没有什么比合法用户被拒绝访问他购买的应用程序更糟糕的了。到目前为止,我没有遇到任何问题(我查看使用情况统计数据并与我的帐户进行比较),但我认为游戏更麻烦(这是该领域的典型问题)。
所以,回到我的建设性(请,我们都试图在这里学习,包括我自己)批评Kerin的帖子,我会说甚至LVL本身还不足以“阻止盗版”。
如果你对Android的运作方式有所了解,你就会知道apks可以很容易地解密为源代码,只需使用dex2jar
和jdgui
(Google就可以了)。事实上,我总是在发布之前解密我的应用程序,以检查一切是否正常运行。并考虑到我从未做过计算机大学,我刚刚学习java和Android来创建我自己的应用程序,我需要并且不适用于Android(我的国家的潮流应用程序)。我确信有更多更聪明的黑客和技术人员可以做得更多。
人们开始认为LVL会阻止盗版,然后学习丑陋的真相并感到失望。这不是LVL的用途。只需查看代码......就可以避免“自动化”盗版。它是强迫某人亲自查看代码,看看它是如何工作的,然后“切换”正确的标志,如果他能理解它们。但话说回来,如果你使用proguard,它将使任务变得可怕,详尽(相信我,这就是为什么我自己使用dex2jar + jdgui)。
如果您的应用以1美元甚至5美元或更高的价格出售,那么这个问题就不值得了。这是我对LVL的立场。显然,如果你有一个价格为100美元的小众应用程序,你可能可以使用公钥在服务器端正确完成。但我觉得这不是这种情况。
无论如何,只是我的2美分。
答案 1 :(得分:0)
您可以首次检查许可证,然后将其缓存。下次运行应用程序时,从缓存中读取许可证,并启动从服务器获取许可证的线程。如果从服务器获得的许可证现在无效。您可以弹出一个对话框,告诉用户许可证无效,删除缓存的许可证,然后退出应用程序。