【问题标题】:@JavaScriptInterface to work with both ICS and JB projects@JavaScriptInterface 可用于 ICS 和 JB 项目
【发布时间】:2013-05-13 18:21:55
【问题描述】:

我遇到了@JavaScriptInterface annotation 要求支持 api 15 (ICS) 和 17 (JB) 的问题。我有一个由两个应用程序项目共享的 Android 库项目。库项目包含带有javascript interfaces 的WebView 相关类。对于应用程序项目,其中一个以 api 15 为目标,而另一个以 api 17 为目标。这是我们的要求/约束​​,因为我们使用定制的 Android SDK。

问题是如何使库项目与两个应用程序项目一起工作。如果库项目以 api 15 为目标,则不能有 @JavaScriptInterface 注释,这意味着 javascript 回调将无法与 api 17 应用程序项目一起使用。

另一方面,如果库项目以 api 17 为目标,它将无法与 api 15 应用程序项目一起使用,因为应用程序项目无法与更高 api 级别的库项目链接。

关于如何让库项目中的 javascript 接口类同时适用于 api 15 和 api 17 应用程序项目的任何建议?

【问题讨论】:

  • 我正在研究的一种方法是使用依赖注入的方法。库项目使用自定义注释,其中 api 17 项目注入 @JavaScriptInterface 而 api 15 项目注入 noop。但是,这似乎是不可能的,因为 JDK 6 中的注解不支持继承。

标签: javascript android annotations android-webview android-4.2-jelly-bean


【解决方案1】:

关于如何让库项目中的 javascript 接口类同时适用于 api 15 和 api 17 应用程序项目的任何建议?

android:targetSdkVersion 设置为小于 17,因为在将 android:targetSdkVersion 设置为 17 或更高之前,不会应用 @JavaScriptInterface。然后,直接跳过@JavaScriptInterface

【讨论】:

  • 这不起作用。该类位于由 api15 和 api17 应用程序项目共享的库项目中。在构建 api17 应用程序项目时,它希望库项目中的类具有@JavaScriptInterface,而不管库项目的 targetSdkVersion。虽然构建成功,但 javascript 调用不起作用。
  • @ejel:对不起,我的意思是你应该在应用程序项目上将android:targetSdkVersion 设置为小于 17,而不是在库上。
  • api17 应用程序项目需要访问一些特定于 api17 的 API(其中一些作为与 api17 紧密相关的自定义附加 SDK 提供)。因此该项目需要 targetSdkVersion = 17。
  • @ejel: "因此该项目需要 targetSdkVersion = 17" -- 你需要了解构建目标之间的区别(即,你正在编译的android.jar,它控制着你是否可以“访问一些特定于 api17 的 API") 和 android:targetSdkVersion(没有)。虽然它们的名称中都包含“目标”,但它们是独立的概念。由于这是清单文件中的一个字符更改,因此您可以考虑实际尝试一下。
  • 你是对的——我对构建目标和android:targetdkVersion 感到困惑。将targetSdkVersion设置为15会导致应用api15兼容模式,因此@JavaScriptInterface要求不生效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多