cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From purplecabbage <purplecabb...@gmail.com>
Subject Re: addJavascriptInterface fails on Android API levels 17 and 18 (4.2.2 and 4.3)
Date Thu, 12 Sep 2013 07:36:10 GMT
Android does not use jsi for this exact reason, so it is advised that you do the same. 
My advice, short of making a full on plugin, is to learn how to use cordova.exec directly
and never worry about a bridge again. 

Sent from my iPhone

> On Sep 12, 2013, at 12:00 AM, "dev at watch2web.com" <dev@watch2web.com> wrote:
> 
> My app is a Cordova app -- Cordova 3.0.0, as I said. I added just a few little JavascriptInterface
methods because they did so little that writing a full-on plugin seemed like overkill. It
has all worked very nicely until API 17, and I have not come across something that says it
is forbidden to create your own little JSI when using Cordova. If it is forbidden, please
tell me, and I apologize for my ignorance.
> 
> I am using JDK 1.6. According to docs, it has full support for annotations, and if it
didn't, wouldn't this have failed on API levels 16 and lower?
> 
> I guess your point is that I can probably demonstrate the same failure in an app that
doesn't use Cordova, and therefore, my problem is irrelevant. You may be right about the first
part, and of course I respect your judgment re. relevance. But I imagine the same thing could
be said about a lot of issues you have had to deal with. I was hoping to get some direction
from experts who have had to deal with whatever change in Android 4.2.2 (API 17) occurred
that seems to be connected here.
> 
> 
> ----- Original Message ----- From: "Joe Bowser" <bowserj@gmail.com>
> To: "dev" <dev@cordova.apache.org>
> Sent: Wednesday, 11 September, 2013 16:59
> Subject: Re: addJavascriptInterface fails on Android API levels 17 and 18 (4.2.2 and
4.3)
> 
> 
> What does this have to do with Cordova? It looks like you're building
> your own bridge on Android.
> 
> Make sure that your Java version that you're building with supports
> annotations. If not, you won't be able to add the Javascript
> Interface.
> 
>> On Wed, Sep 11, 2013 at 4:52 PM, dev at watch2web.com <dev@watch2web.com> wrote:
>> I recently changed the value of targetSdkVersion in my AndroidManifest.xml from 16
to 18. They say, "Better late than never," but maybe not in this case. I discovered that the
change causes my app to white-screen on startup on two Samsung Galaxy S4s -- both running
API level 17 (4.2.2). (On the five other devices I have -- all running API 16 or lower --
 everything still works as if nothing has changed.) If I set targetSdkVersion back to 16,
the app works great on all devices, including both Samsungs. I am using Cordova 3.0.0.
>> 
>> I have traced the problem to my onDeviceReady function, at the line where it first
tries to execute one of my @JavascriptInterface functions. (It doesn't seem to matter which
one.) Code snippet looks like:
>> 
>> (in main Activity)
>> 
>> appView.addJavascriptInterface(this, "MyJSI");
>> 
>> @JavascriptInterface
>> public void foo() { .... }
>> 
>> 
>> (in onDeviceReady)
>> 
>> if (window.MyJSI == undefined) console.log("javascript interface is undefined");
>> else if (window.MyJSI == null) console.log("javascript interface is null");
>> else if (typeof(window.MyJSI) == 'object') console.log("javascript interface is an
object: " + window.MyJSI);
>> else console.log("javascript interface is not an object");
>> 
>> window.MyJSI.foo();  // foo is just some method I wrote -- I've only experimented
with a few
>> 
>> 
>> On both "good" (API level <= 16) and "bad" (Galaxy S4, API level >= 17) phones
I get in the console output:
>> 
>>>> javascript interface is an object: [object Object]
>> 
>> On the "good" phones, everything continues, and I get all the logging that comes
from subsequent parts of the app. On the "bad" phone, I get:
>> 
>>>> Uncaught TypeError: Object [object Object] has no method 'foo'
>> 
>> and things pretty much stop.
>> 
>> 
>> You'd think I was in OK shape. I have a fix that involves changing one character
-- not even in code, just a settings file -- and it works on all API levels. But NO, Google
Play forbids lowering the targetSdkVersion. So I need to fix this for real.
>> 
>> In searching, I found this issue from December. It isn't exactly what I'm seeing
since deviceready does fire for me. But a lot of the elements seem very similar.
>> 
>> https://issues.apache.org/jira/browse/CB-1879?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13501660#comment-13501660
>> 
>> 
>> I'm happy to dig through Java source myself if it will help, but if so, I could use
a little guidance getting started.
>> 
>> Thanks,
>> Andrew
> 

Mime
View raw message