3

api 15 (ICS) 및 17 (JB)을 지원하려면 @JavaScriptInterface annotation 요구 사항이 있습니다. 두 개의 응용 프로그램 프로젝트에서 공유하는 Android 라이브러리 프로젝트가 있습니다. 라이브러리 프로젝트는 javascript interfaces 인 WebView 관련 클래스를 포함합니다. 응용 프로그램 프로젝트의 경우 하나는 api 15를 대상으로하고 다른 하나는 api 17을 대상으로합니다. 이는 사용자 정의 Android SDK를 사용하기 때문에 우리의 요구 사항입니다.@JavaScriptInterface는 ICS 프로젝트와 JB 프로젝트 모두에서 작동합니다.

문제는 라이브러리 프로젝트가 두 응용 프로그램 프로젝트에서 모두 작동하도록 만드는 것입니다. 라이브러리 프로젝트가 api 15를 대상으로하는 경우 @JavaScriptInterface 주석을 사용할 수 없습니다. 즉, javascript 콜백은 api 17 응용 프로그램 프로젝트에서 작동하지 않습니다.

한편, 라이브러리 프로젝트가 api17을 대상으로하는 경우에는 응용 프로그램 프로젝트가 상위 API 수준의 라이브러리 프로젝트와 연결할 수 없으므로 api15 응용 프로그램 프로젝트에서 작동하지 않습니다.

라이브러리 프로젝트에서 javascript 인터페이스 클래스를 갖는 방법에 대한 제안 사항은 api 15 및 api 17 응용 프로그램 프로젝트 모두에서 작동합니까?

+0

내가 조사한 한 가지 접근법은 의존성 주입 라인을 따라 무언가를 사용하는 것이 었습니다. 라이브러리 프로젝트는 custom annotation을 사용하는데, api 17 프로젝트에서는 @JavaScriptInterface를, api 15 프로젝트에서는 noop을 주입합니다. 그러나 이것은 JDK 6의 주석이 상속을 지원하지 않기 때문에 가능하지 않습니다. – ejel

답변

3

라이브러리 프로젝트에서 javascript 인터페이스 클래스를 갖는 방법에 대한 제안 사항은 api 15 및 api 17 응용 프로그램 프로젝트 모두에서 작동합니까? 당신이 android:targetSdkVersion에 17 이상을 설정할 때까지

이 적용되지 않습니다 @JavaScriptInterface로, 당신의 android:targetSdkVersion 17 이하로 설정합니다. 그런 다음 @JavaScriptInterface을 건너 뜁니다.

+0

이것은 작동하지 않습니다. 이 수업은 api15 및 api17 응용 프로그램 프로젝트에서 공유하는 도서관 프로젝트에 있습니다. api17 응용 프로그램 프로젝트를 빌드 할 때 라이브러리 프로젝트의 targetSdkVersion에 관계없이 라이브러리 프로젝트의 클래스에 @JavaScriptInterface가 있어야합니다. 빌드가 성공적으로 진행되는 동안 javascript 호출이 작동하지 않습니다. – ejel

+0

@ejel : 죄송합니다. 라이브러리에서가 아니라 응용 프로그램 프로젝트에서 'android : targetSdkVersion'을 17보다 작게 설정해야합니다. – CommonsWare

+0

api17 애플리케이션 프로젝트는 일부 api17 관련 API에 액세스해야합니다 (일부는 api17에 엄격한 맞춤형 애드온 SDK로 제공됩니다). 따라서 프로젝트는 targetSdkVersion = 17.을 요구합니다. – ejel