Andrew Grieve created CB-2666:
---------------------------------
Summary: Android bridge chokes on UTF characters only on Galaxy S2
JellyBean
Key: CB-2666
URL: https://issues.apache.org/jira/browse/CB-2666
Project: Apache Cordova
Issue Type: Bug
Components: Android
Reporter: Andrew Grieve
Assignee: Andrew Grieve
Priority: Minor
Attachments: LoggerTest.zip
Reported via email from Lindsey Simon.
Test project attached.
This bug appears to be in a call to the logger plugin. We overload the plugin
to point at our own Java Class in config.xml, but call it like
cordova.require('cordova/plugin/logger').log('foo).
Anyhow, this bug is really hard to reproduce - and I'm only getting on a Galaxy
S2 with Jelly Bean.
Maybe this Eclipse dump is useful? I'm having trouble figure I might do to fix
it.
// Compiled from ExposedJsApi.java (version 1.5 : 49.0, super bit)
class org.apache.cordova.ExposedJsApi {
// Field descriptor #12 Lorg/apache/cordova/api/PluginManager;
private org.apache.cordova.api.PluginManager pluginManager;
// Field descriptor #14 Lorg/apache/cordova/NativeToJsMessageQueue;
private org.apache.cordova.NativeToJsMessageQueue jsMessageQueue;
// Method descriptor #16
(Lorg/apache/cordova/api/PluginManager;Lorg/apache/cordova/NativeToJsMessageQueue;)V
// Stack: 2, Locals: 3
public ExposedJsApi(org.apache.cordova.api.PluginManager pluginManager,
org.apache.cordova.NativeToJsMessageQueue jsMessageQueue);
0 aload_0 [this]
1 invokespecial java.lang.Object() [1]
4 aload_0 [this]
5 aload_1 [pluginManager]
6 putfield org.apache.cordova.ExposedJsApi.pluginManager :
org.apache.cordova.api.PluginManager [2]
9 aload_0 [this]
10 aload_2 [jsMessageQueue]
11 putfield org.apache.cordova.ExposedJsApi.jsMessageQueue :
org.apache.cordova.NativeToJsMessageQueue [3]
14 return
Line numbers:
[pc: 0, line: 36]
[pc: 4, line: 37]
[pc: 9, line: 38]
[pc: 14, line: 39]
Local variable table:
[pc: 0, pc: 15] local: this index: 0 type:
org.apache.cordova.ExposedJsApi
[pc: 0, pc: 15] local: pluginManager index: 1 type:
org.apache.cordova.api.PluginManager
[pc: 0, pc: 15] local: jsMessageQueue index: 2 type:
org.apache.cordova.NativeToJsMessageQueue
// Method descriptor #23
(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
// Stack: 5, Locals: 9
@android.webkit.JavascriptInterface
public java.lang.String exec(java.lang.String service, java.lang.String
action, java.lang.String callbackId, java.lang.String arguments) throws
org.json.JSONException;
0 aload_0 [this]
1 getfield org.apache.cordova.ExposedJsApi.jsMessageQueue :
org.apache.cordova.NativeToJsMessageQueue [3]
4 iconst_1
5 invokevirtual
org.apache.cordova.NativeToJsMessageQueue.setPaused(boolean) : void [4]
8 aload_0 [this]
9 getfield org.apache.cordova.ExposedJsApi.pluginManager :
org.apache.cordova.api.PluginManager [2]
12 aload_1 [service]
13 aload_2 [action]
14 aload_3 [callbackId]
15 aload 4 [arguments]
17 invokevirtual
org.apache.cordova.api.PluginManager.exec(java.lang.String, java.lang.String,
java.lang.String, java.lang.String) : boolean [5]
20 istore 5 [wasSync]
22 ldc <String ""> [6]
24 astore 6 [ret]
26 aload_0 [this]
27 getfield org.apache.cordova.ExposedJsApi.jsMessageQueue :
org.apache.cordova.NativeToJsMessageQueue [3]
30 invokevirtual org.apache.cordova.NativeToJsMessageQueue.popAndEncode()
: java.lang.String [7]
33 astore 6 [ret]
35 aload 6 [ret]
37 astore 7
39 aload_0 [this]
40 getfield org.apache.cordova.ExposedJsApi.jsMessageQueue :
org.apache.cordova.NativeToJsMessageQueue [3]
43 iconst_0
44 invokevirtual
org.apache.cordova.NativeToJsMessageQueue.setPaused(boolean) : void [4]
47 aload 7
49 areturn
50 astore 8
52 aload_0 [this]
53 getfield org.apache.cordova.ExposedJsApi.jsMessageQueue :
org.apache.cordova.NativeToJsMessageQueue [3]
56 iconst_0
57 invokevirtual
org.apache.cordova.NativeToJsMessageQueue.setPaused(boolean) : void [4]
60 aload 8
62 athrow
Exception Table:
[pc: 8, pc: 39] -> 50 when : any
[pc: 50, pc: 52] -> 50 when : any
Line numbers:
[pc: 0, line: 43]
[pc: 8, line: 45]
[pc: 22, line: 46]
[pc: 26, line: 48]
[pc: 35, line: 50]
[pc: 39, line: 52]
Local variable table:
[pc: 22, pc: 50] local: wasSync index: 5 type: boolean
[pc: 26, pc: 50] local: ret index: 6 type: java.lang.String
[pc: 0, pc: 63] local: this index: 0 type:
org.apache.cordova.ExposedJsApi
[pc: 0, pc: 63] local: service index: 1 type: java.lang.String
[pc: 0, pc: 63] local: action index: 2 type: java.lang.String
[pc: 0, pc: 63] local: callbackId index: 3 type: java.lang.String
[pc: 0, pc: 63] local: arguments index: 4 type: java.lang.String
// Method descriptor #37 (I)V
// Stack: 2, Locals: 2
@android.webkit.JavascriptInterface
public void setNativeToJsBridgeMode(int value);
0 aload_0 [this]
1 getfield org.apache.cordova.ExposedJsApi.jsMessageQueue :
org.apache.cordova.NativeToJsMessageQueue [3]
4 iload_1 [value]
5 invokevirtual
org.apache.cordova.NativeToJsMessageQueue.setBridgeMode(int) : void [8]
8 return
Line numbers:
[pc: 0, line: 58]
[pc: 8, line: 59]
Local variable table:
[pc: 0, pc: 9] local: this index: 0 type:
org.apache.cordova.ExposedJsApi
[pc: 0, pc: 9] local: value index: 1 type: int
// Method descriptor #41 ()Ljava/lang/String;
// Stack: 1, Locals: 1
@android.webkit.JavascriptInterface
public java.lang.String retrieveJsMessages();
0 aload_0 [this]
1 getfield org.apache.cordova.ExposedJsApi.jsMessageQueue :
org.apache.cordova.NativeToJsMessageQueue [3]
4 invokevirtual org.apache.cordova.NativeToJsMessageQueue.popAndEncode() :
java.lang.String [7]
7 areturn
Line numbers:
[pc: 0, line: 63]
Local variable table:
[pc: 0, pc: 8] local: this index: 0 type:
org.apache.cordova.ExposedJsApi
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira