Commit b5fc8c7
committed
android: jni 0.22 update, exception checks, support any 'Context'
This addresses some exception-handling hygiene issues in the Android
backend, and adds support for non-`Activity` `Context` references
(considering that `ndk-context` does not guarantee that it provides an
`Activity` reference).
With the previous implementation, if any of the JNI calls failed (such
as the `find_class` call), that would have thrown an exception which was
not automatically caught by the jni 0.21 crate. Since there was no code
to ensure exceptions were checked and cleared on failure then the
previous implementation would have had the side effect of blocking any
further JNI on the same thread until the exception was cleared - but it
would not have reported a recognisable error for indicating this side
effect.
By contrast, with jni 0.22 we can rely on the `attach_current_thread`
call to check and clear exceptions from the closure before returning.
This change also prepares this crate for a planned change in
`android-activity` to initialize `ndk-context` with an `Application`
reference instead of an `Activity` reference, ref:
rust-mobile/android-activity#228
The fact that `android-activity` currently initializes `ndk-context`
with an `Activity` reference is not itself guaranteed by the
`ndk-context` crate (it only promises an `android.content.Context`
reference) but the previous android backend was depending on receiving
an `Activity` reference and would throw an exception if it didn't.
Note: Associating `ndk-context` with an `Activity` does not align well
with Android application programming model because Android applications
may often manage many Activities and it doesn't align with the design of
`ndk-context` because the `ndk-context` state can't be re-initialized.
Even if ndk-context could be changed to support state updates without a
panic it could still be ambiguous to maintain a single global reference
to one Activity in an application with multiple or possibly no Activity.
The new implementation will continue as it did before in case it does
receive an Activity reference, but in case it receives some other kind
of `Context` then now adds a `ACTIVITY_NEW_TASK` flag to the `Intent` to
indicate that the new Activity is allowed to create a new `Task`. In
practice this expected to be irrelevant (and result in identical
behaviour) because the URL is most likely to be handled by a separate
browser application.
This needed to bump the rust-version to 1.85 since that's the MSRV for
jni 0.22
This also updates the Android test to be based on android-activity
instead of ndk-glue1 parent 94baf04 commit b5fc8c7
File tree
5 files changed
+159
-79
lines changed- src
- tests/test-android-app
- src
5 files changed
+159
-79
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
24 | 95 | | |
25 | 96 | | |
26 | 97 | | |
| |||
34 | 105 | | |
35 | 106 | | |
36 | 107 | | |
37 | | - | |
| 108 | + | |
38 | 109 | | |
39 | | - | |
40 | | - | |
| 110 | + | |
| 111 | + | |
41 | 112 | | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
95 | 187 | | |
96 | 188 | | |
97 | 189 | | |
| |||
117 | 209 | | |
118 | 210 | | |
119 | 211 | | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
| 212 | + | |
124 | 213 | | |
125 | 214 | | |
126 | 215 | | |
127 | | - | |
| 216 | + | |
128 | 217 | | |
129 | 218 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | | - | |
| 11 | + | |
13 | 12 | | |
14 | 13 | | |
15 | 14 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
4 | 1 | | |
5 | 2 | | |
6 | | - | |
7 | | - | |
| 3 | + | |
| 4 | + | |
8 | 5 | | |
9 | 6 | | |
10 | 7 | | |
| |||
This file was deleted.
0 commit comments