0

我有一个使用 LVL 的应用程序。它由(为简单起见)两个活动组成:第一个活动称为 LVLActivity 检查许可证。如果失败,它会简单地结束,否则它会启动第二个名为 MainActivity 的具有明确意图的活动。

在清单中,有

<application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name=".LVLActivity">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
  </activity>
  <activity android:name=".MainActivity">
  </activity>
</application>

其他人是否可以编写一个小应用程序以明确的意图启动 MainActivity?
这种设置是否足以进行合理的保护?

4

2 回答 2

1

我相信 MainActivity 可以通过以下方式从另一个应用程序启动:

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.package", "com.package.MainActivity"));
startActivity(intent);

所以,不,这不会保护您的 MainActivity 本身,但是您可以在 LVLActivity 和 MainActivity 之间拥有某种必需的共享数据,这样如果该数据不存在,MainActivity 就会停止。

但是,请注意,即使这样也不会阻止可以对代码进行逆向工程的用户。为了防止这种情况发生,您的设备上的应用程序中不应包含任何敏感数据——这基本上意味着您应该在服务器上执行所有业务逻辑,并且只将对给定用户安全的数据发送回设备。当然,您需要在服务器上进行某种用户身份验证+授权。

于 2011-02-15T11:54:04.150 回答
0

为什么不在主要活动中进行许可证检查?这是谷歌推荐的方式。

除此之外,您可以随时执行许可证检查,但@Peter Knego 说如果有人真的想绕过许可证检查,那么他们会这样做是正确的。

于 2011-02-15T13:09:20.323 回答