@capacitor/android 9.0.0-alpha.2 → 9.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/capacitor/build.gradle +3 -4
- package/capacitor/src/main/java/com/getcapacitor/Bridge.java +10 -56
- package/capacitor/src/main/java/com/getcapacitor/PluginConfig.java +11 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.java +45 -26
- package/capacitor/src/main/java/com/getcapacitor/plugin/util/CapacitorHttpUrlConnection.java +2 -11
- package/capacitor/src/main/java/com/getcapacitor/util/JSONUtils.java +20 -0
- package/capacitor-cordova/build.gradle +3 -4
- package/capacitor-cordova/src/main/java/com/getcapacitor/cordova/MockCordovaWebViewImpl.java +6 -8
- package/package.json +2 -2
package/capacitor/build.gradle
CHANGED
|
@@ -20,7 +20,7 @@ buildscript {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
dependencies {
|
|
23
|
-
classpath 'com.android.tools.build:gradle:
|
|
23
|
+
classpath 'com.android.tools.build:gradle:9.2.1'
|
|
24
24
|
|
|
25
25
|
if (System.getenv("CAP_PUBLISH") == "true") {
|
|
26
26
|
classpath 'io.github.gradle-nexus:publish-plugin:1.3.0'
|
|
@@ -40,10 +40,9 @@ if (System.getenv("CAP_PUBLISH") == "true") {
|
|
|
40
40
|
|
|
41
41
|
android {
|
|
42
42
|
namespace = "com.getcapacitor.android"
|
|
43
|
-
compileSdk = project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion :
|
|
43
|
+
compileSdk = project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 37
|
|
44
44
|
defaultConfig {
|
|
45
|
-
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion :
|
|
46
|
-
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 36
|
|
45
|
+
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 26
|
|
47
46
|
versionCode 1
|
|
48
47
|
versionName "1.0"
|
|
49
48
|
consumerProguardFiles 'proguard-rules.pro'
|
|
@@ -11,7 +11,6 @@ import android.content.pm.PackageInfo;
|
|
|
11
11
|
import android.content.pm.PackageManager;
|
|
12
12
|
import android.content.res.Configuration;
|
|
13
13
|
import android.net.Uri;
|
|
14
|
-
import android.os.Build;
|
|
15
14
|
import android.os.Bundle;
|
|
16
15
|
import android.os.Handler;
|
|
17
16
|
import android.os.HandlerThread;
|
|
@@ -51,7 +50,6 @@ import java.util.LinkedList;
|
|
|
51
50
|
import java.util.List;
|
|
52
51
|
import java.util.Map;
|
|
53
52
|
import java.util.Set;
|
|
54
|
-
import java.util.function.Function;
|
|
55
53
|
import java.util.regex.Matcher;
|
|
56
54
|
import java.util.regex.Pattern;
|
|
57
55
|
import org.json.JSONException;
|
|
@@ -294,63 +292,19 @@ public class Bridge {
|
|
|
294
292
|
|
|
295
293
|
@SuppressLint("WebViewApiAvailability")
|
|
296
294
|
public boolean isMinimumWebViewInstalled() {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
if (
|
|
301
|
-
|
|
302
|
-
Pattern pattern = Pattern.compile("(\\d+)");
|
|
303
|
-
Matcher matcher = pattern.matcher(info.versionName);
|
|
304
|
-
if (matcher.find()) {
|
|
305
|
-
String majorVersionStr = matcher.group(0);
|
|
306
|
-
int majorVersion = Integer.parseInt(majorVersionStr);
|
|
307
|
-
if (info.packageName.equals("com.huawei.webview")) {
|
|
308
|
-
return majorVersion >= config.getMinHuaweiWebViewVersion();
|
|
309
|
-
}
|
|
310
|
-
return majorVersion >= config.getMinWebViewVersion();
|
|
311
|
-
} else {
|
|
312
|
-
return false;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
// Otherwise manually check WebView versions
|
|
317
|
-
try {
|
|
318
|
-
PackageInfo info = InternalUtils.getPackageInfo(pm, "com.android.chrome");
|
|
319
|
-
String majorVersionStr = info.versionName.split("\\.")[0];
|
|
320
|
-
int majorVersion = Integer.parseInt(majorVersionStr);
|
|
321
|
-
return majorVersion >= config.getMinWebViewVersion();
|
|
322
|
-
} catch (Exception ex) {
|
|
323
|
-
Logger.warn("Unable to get package info for 'com.google.android.webview'" + ex.toString());
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
try {
|
|
327
|
-
PackageInfo info = InternalUtils.getPackageInfo(pm, "com.android.webview");
|
|
328
|
-
String majorVersionStr = info.versionName.split("\\.")[0];
|
|
295
|
+
PackageInfo info = WebView.getCurrentWebViewPackage();
|
|
296
|
+
Pattern pattern = Pattern.compile("(\\d+)");
|
|
297
|
+
Matcher matcher = pattern.matcher(info.versionName);
|
|
298
|
+
if (matcher.find()) {
|
|
299
|
+
String majorVersionStr = matcher.group(0);
|
|
329
300
|
int majorVersion = Integer.parseInt(majorVersionStr);
|
|
301
|
+
if (info.packageName.equals("com.huawei.webview")) {
|
|
302
|
+
return majorVersion >= config.getMinHuaweiWebViewVersion();
|
|
303
|
+
}
|
|
330
304
|
return majorVersion >= config.getMinWebViewVersion();
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
final int amazonFireMajorWebViewVersion = extractWebViewMajorVersion(pm, "com.amazon.webview.chromium");
|
|
336
|
-
if (amazonFireMajorWebViewVersion >= config.getMinWebViewVersion()) {
|
|
337
|
-
return true;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// Could not detect any webview, return false
|
|
341
|
-
return false;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
private int extractWebViewMajorVersion(final PackageManager pm, final String webViewPackageName) {
|
|
345
|
-
try {
|
|
346
|
-
final PackageInfo info = InternalUtils.getPackageInfo(pm, webViewPackageName);
|
|
347
|
-
final String majorVersionStr = info.versionName.split("\\.")[0];
|
|
348
|
-
final int majorVersion = Integer.parseInt(majorVersionStr);
|
|
349
|
-
return majorVersion;
|
|
350
|
-
} catch (Exception ex) {
|
|
351
|
-
Logger.warn(String.format("Unable to get package info for '%s' with err '%s'", webViewPackageName, ex));
|
|
305
|
+
} else {
|
|
306
|
+
return false;
|
|
352
307
|
}
|
|
353
|
-
return 0;
|
|
354
308
|
}
|
|
355
309
|
|
|
356
310
|
public boolean launchIntent(Uri url) {
|
|
@@ -65,6 +65,17 @@ public class PluginConfig {
|
|
|
65
65
|
return JSONUtils.getInt(config, configKey, defaultValue);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Get a double value for a plugin in the Capacitor config.
|
|
70
|
+
*
|
|
71
|
+
* @param configKey The key of the value to retrieve
|
|
72
|
+
* @param defaultValue A default value to return if the key does not exist in the config
|
|
73
|
+
* @return The value from the config, if key exists. Default value returned if not
|
|
74
|
+
*/
|
|
75
|
+
public double getDouble(String configKey, double defaultValue) {
|
|
76
|
+
return JSONUtils.getDouble(config, configKey, defaultValue);
|
|
77
|
+
}
|
|
78
|
+
|
|
68
79
|
/**
|
|
69
80
|
* Get a string array value for a plugin in the Capacitor config.
|
|
70
81
|
*
|
|
@@ -16,6 +16,7 @@ import androidx.core.view.WindowCompat;
|
|
|
16
16
|
import androidx.core.view.WindowInsetsCompat;
|
|
17
17
|
import androidx.core.view.WindowInsetsControllerCompat;
|
|
18
18
|
import androidx.webkit.WebViewCompat;
|
|
19
|
+
import com.getcapacitor.Logger;
|
|
19
20
|
import com.getcapacitor.Plugin;
|
|
20
21
|
import com.getcapacitor.PluginCall;
|
|
21
22
|
import com.getcapacitor.PluginMethod;
|
|
@@ -32,6 +33,7 @@ public class SystemBars extends Plugin {
|
|
|
32
33
|
static final String BAR_STATUS_BAR = "StatusBar";
|
|
33
34
|
static final String BAR_GESTURE_BAR = "NavigationBar";
|
|
34
35
|
|
|
36
|
+
// TODO: In Cap 9, add an additional option "full"
|
|
35
37
|
static final String INSETS_HANDLING_CSS = "css";
|
|
36
38
|
static final String INSETS_HANDLING_DISABLE = "disable";
|
|
37
39
|
|
|
@@ -53,7 +55,7 @@ public class SystemBars extends Plugin {
|
|
|
53
55
|
capacitorSystemBarsCheckMetaViewport();
|
|
54
56
|
""";
|
|
55
57
|
|
|
56
|
-
private
|
|
58
|
+
private String insetsHandling = INSETS_HANDLING_CSS;
|
|
57
59
|
private boolean hasViewportCover = false;
|
|
58
60
|
|
|
59
61
|
private String currentStatusBarStyle = STYLE_DEFAULT;
|
|
@@ -94,9 +96,15 @@ public class SystemBars extends Plugin {
|
|
|
94
96
|
String style = getConfig().getString("style", STYLE_DEFAULT).toUpperCase(Locale.US);
|
|
95
97
|
boolean hidden = getConfig().getBoolean("hidden", false);
|
|
96
98
|
|
|
97
|
-
String
|
|
98
|
-
if (
|
|
99
|
-
|
|
99
|
+
String configuredInsetsHandling = getConfig().getString("insetsHandling", INSETS_HANDLING_CSS);
|
|
100
|
+
if (INSETS_HANDLING_CSS.equals(configuredInsetsHandling) || INSETS_HANDLING_DISABLE.equals(configuredInsetsHandling)) {
|
|
101
|
+
insetsHandling = configuredInsetsHandling;
|
|
102
|
+
} else {
|
|
103
|
+
Logger.warn(
|
|
104
|
+
"SystemBars",
|
|
105
|
+
"Unknown insetsHandling value '" + configuredInsetsHandling + "'. Falling back to '" + INSETS_HANDLING_CSS + "'."
|
|
106
|
+
);
|
|
107
|
+
insetsHandling = INSETS_HANDLING_CSS;
|
|
100
108
|
}
|
|
101
109
|
|
|
102
110
|
initWindowInsetsListener();
|
|
@@ -146,13 +154,15 @@ public class SystemBars extends Plugin {
|
|
|
146
154
|
|
|
147
155
|
@JavascriptInterface
|
|
148
156
|
public void onDOMReady() {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
157
|
+
if (INSETS_HANDLING_CSS.equals(insetsHandling)) {
|
|
158
|
+
getActivity().runOnUiThread(() -> {
|
|
159
|
+
this.bridge.getWebView().evaluateJavascript(viewportMetaJSFunction, (res) -> {
|
|
160
|
+
hasViewportCover = res.equals("true");
|
|
152
161
|
|
|
153
|
-
|
|
162
|
+
getBridge().getWebView().requestApplyInsets();
|
|
163
|
+
});
|
|
154
164
|
});
|
|
155
|
-
}
|
|
165
|
+
}
|
|
156
166
|
}
|
|
157
167
|
|
|
158
168
|
private Insets calcSafeAreaInsets(WindowInsetsCompat insets) {
|
|
@@ -164,9 +174,16 @@ public class SystemBars extends Plugin {
|
|
|
164
174
|
}
|
|
165
175
|
|
|
166
176
|
private void initSafeAreaCSSVariables() {
|
|
167
|
-
if (
|
|
168
|
-
|
|
169
|
-
|
|
177
|
+
if (INSETS_HANDLING_CSS.equals(insetsHandling)) {
|
|
178
|
+
WindowInsetsCompat insets;
|
|
179
|
+
|
|
180
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
181
|
+
View v = (View) this.getBridge().getWebView().getParent();
|
|
182
|
+
insets = ViewCompat.getRootWindowInsets(v);
|
|
183
|
+
} else {
|
|
184
|
+
insets = WindowInsetsCompat.CONSUMED;
|
|
185
|
+
}
|
|
186
|
+
|
|
170
187
|
if (insets != null) {
|
|
171
188
|
Insets safeAreaInsets = calcSafeAreaInsets(insets);
|
|
172
189
|
injectSafeAreaCSS(safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom, safeAreaInsets.left);
|
|
@@ -175,6 +192,10 @@ public class SystemBars extends Plugin {
|
|
|
175
192
|
}
|
|
176
193
|
|
|
177
194
|
private void initWindowInsetsListener() {
|
|
195
|
+
if (INSETS_HANDLING_DISABLE.equals(insetsHandling)) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
|
|
178
199
|
ViewCompat.setOnApplyWindowInsetsListener((View) getBridge().getWebView().getParent(), (v, insets) -> {
|
|
179
200
|
boolean shouldPassthroughInsets = getWebViewMajorVersion() >= WEBVIEW_VERSION_WITH_SAFE_AREA_FIX && hasViewportCover;
|
|
180
201
|
|
|
@@ -186,10 +207,8 @@ public class SystemBars extends Plugin {
|
|
|
186
207
|
// We need to correct for a possible shown IME
|
|
187
208
|
v.setPadding(0, 0, 0, keyboardVisible ? imeInsets.bottom : 0);
|
|
188
209
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
injectSafeAreaCSS(safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom, safeAreaInsets.left);
|
|
192
|
-
}
|
|
210
|
+
Insets safeAreaInsets = calcSafeAreaInsets(insets);
|
|
211
|
+
injectSafeAreaCSS(safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom, safeAreaInsets.left);
|
|
193
212
|
|
|
194
213
|
return new WindowInsetsCompat.Builder(insets)
|
|
195
214
|
.setInsets(
|
|
@@ -221,10 +240,8 @@ public class SystemBars extends Plugin {
|
|
|
221
240
|
.setInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout(), Insets.of(0, 0, 0, 0))
|
|
222
241
|
.build();
|
|
223
242
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
injectSafeAreaCSS(safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom, safeAreaInsets.left);
|
|
227
|
-
}
|
|
243
|
+
Insets safeAreaInsets = calcSafeAreaInsets(newInsets);
|
|
244
|
+
injectSafeAreaCSS(safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom, safeAreaInsets.left);
|
|
228
245
|
|
|
229
246
|
return newInsets;
|
|
230
247
|
});
|
|
@@ -287,19 +304,21 @@ public class SystemBars extends Plugin {
|
|
|
287
304
|
WindowInsetsControllerCompat windowInsetsControllerCompat = WindowCompat.getInsetsController(window, window.getDecorView());
|
|
288
305
|
|
|
289
306
|
if (hide) {
|
|
290
|
-
if (bar.isEmpty()
|
|
307
|
+
if (bar.isEmpty()) {
|
|
308
|
+
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars());
|
|
309
|
+
} else if (bar.equals(BAR_STATUS_BAR)) {
|
|
291
310
|
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.statusBars());
|
|
292
|
-
}
|
|
293
|
-
if (bar.isEmpty() || bar.equals(BAR_GESTURE_BAR)) {
|
|
311
|
+
} else if (bar.equals(BAR_GESTURE_BAR)) {
|
|
294
312
|
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.navigationBars());
|
|
295
313
|
}
|
|
296
314
|
return;
|
|
297
315
|
}
|
|
298
316
|
|
|
299
|
-
if (bar.isEmpty()
|
|
317
|
+
if (bar.isEmpty()) {
|
|
300
318
|
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.systemBars());
|
|
301
|
-
}
|
|
302
|
-
|
|
319
|
+
} else if (bar.equals(BAR_STATUS_BAR)) {
|
|
320
|
+
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.statusBars());
|
|
321
|
+
} else if (bar.equals(BAR_GESTURE_BAR)) {
|
|
303
322
|
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.navigationBars());
|
|
304
323
|
}
|
|
305
324
|
}
|
package/capacitor/src/main/java/com/getcapacitor/plugin/util/CapacitorHttpUrlConnection.java
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
package com.getcapacitor.plugin.util;
|
|
2
2
|
|
|
3
|
-
import android.os.Build;
|
|
4
3
|
import android.os.LocaleList;
|
|
5
4
|
import android.text.TextUtils;
|
|
6
5
|
import com.getcapacitor.Bridge;
|
|
@@ -211,9 +210,7 @@ public class CapacitorHttpUrlConnection implements ICapacitorHttpUrlConnection {
|
|
|
211
210
|
this.writeRequestBody(dataString != null ? dataString : "");
|
|
212
211
|
} else if (bodyType != null && bodyType.equals("file")) {
|
|
213
212
|
try (DataOutputStream os = new DataOutputStream(connection.getOutputStream())) {
|
|
214
|
-
|
|
215
|
-
os.write(Base64.getDecoder().decode(body.toString()));
|
|
216
|
-
}
|
|
213
|
+
os.write(Base64.getDecoder().decode(body.toString()));
|
|
217
214
|
os.flush();
|
|
218
215
|
}
|
|
219
216
|
} else if (contentType.contains("application/x-www-form-urlencoded")) {
|
|
@@ -295,13 +292,7 @@ public class CapacitorHttpUrlConnection implements ICapacitorHttpUrlConnection {
|
|
|
295
292
|
os.writeBytes("Content-Type: " + fileContentType + lineEnd);
|
|
296
293
|
os.writeBytes("Content-Transfer-Encoding: binary" + lineEnd);
|
|
297
294
|
os.writeBytes(lineEnd);
|
|
298
|
-
|
|
299
|
-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
300
|
-
os.write(Base64.getDecoder().decode(value));
|
|
301
|
-
} else {
|
|
302
|
-
os.write(android.util.Base64.decode(value, android.util.Base64.DEFAULT));
|
|
303
|
-
}
|
|
304
|
-
|
|
295
|
+
os.write(Base64.getDecoder().decode(value));
|
|
305
296
|
os.writeBytes(lineEnd);
|
|
306
297
|
}
|
|
307
298
|
}
|
|
@@ -75,6 +75,26 @@ public class JSONUtils {
|
|
|
75
75
|
return defaultValue;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Get a double value from the given JSON object.
|
|
80
|
+
*
|
|
81
|
+
* @param jsonObject A JSON object to search
|
|
82
|
+
* @param key A key to fetch from the JSON object
|
|
83
|
+
* @param defaultValue A default value to return if the key cannot be found
|
|
84
|
+
* @return The value at the given key in the JSON object, or the default value
|
|
85
|
+
*/
|
|
86
|
+
public static double getDouble(JSONObject jsonObject, String key, double defaultValue) {
|
|
87
|
+
String k = getDeepestKey(key);
|
|
88
|
+
try {
|
|
89
|
+
JSONObject o = getDeepestObject(jsonObject, key);
|
|
90
|
+
return o.getDouble(k);
|
|
91
|
+
} catch (JSONException ignore) {
|
|
92
|
+
// value was not found
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return defaultValue;
|
|
96
|
+
}
|
|
97
|
+
|
|
78
98
|
/**
|
|
79
99
|
* Get a JSON object value from the given JSON object.
|
|
80
100
|
*
|
|
@@ -9,7 +9,7 @@ buildscript {
|
|
|
9
9
|
mavenCentral()
|
|
10
10
|
}
|
|
11
11
|
dependencies {
|
|
12
|
-
classpath 'com.android.tools.build:gradle:
|
|
12
|
+
classpath 'com.android.tools.build:gradle:9.2.1'
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -17,10 +17,9 @@ apply plugin: 'com.android.library'
|
|
|
17
17
|
|
|
18
18
|
android {
|
|
19
19
|
namespace = "com.getcapacitor.cordova"
|
|
20
|
-
compileSdk = project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion :
|
|
20
|
+
compileSdk = project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 37
|
|
21
21
|
defaultConfig {
|
|
22
|
-
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion :
|
|
23
|
-
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 36
|
|
22
|
+
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 26
|
|
24
23
|
versionCode 1
|
|
25
24
|
versionName "1.0"
|
|
26
25
|
consumerProguardFiles 'proguard-rules.pro'
|
package/capacitor-cordova/src/main/java/com/getcapacitor/cordova/MockCordovaWebViewImpl.java
CHANGED
|
@@ -70,14 +70,12 @@ class MockCordovaWebViewImpl implements CordovaWebView {
|
|
|
70
70
|
|
|
71
71
|
@Override
|
|
72
72
|
public void onNativeToJsMessageAvailable(final NativeToJsMessageQueue queue) {
|
|
73
|
-
cordova
|
|
74
|
-
.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
});
|
|
73
|
+
cordova.getActivity().runOnUiThread(() -> {
|
|
74
|
+
String js = queue.popAndEncodeAsJs();
|
|
75
|
+
if (js != null) {
|
|
76
|
+
webView.evaluateJavascript(js, null);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
81
79
|
}
|
|
82
80
|
}
|
|
83
81
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor/android",
|
|
3
|
-
"version": "9.0.0-alpha.
|
|
3
|
+
"version": "9.0.0-alpha.4",
|
|
4
4
|
"description": "Capacitor: Cross-platform apps with JavaScript and the web",
|
|
5
5
|
"homepage": "https://capacitorjs.com",
|
|
6
6
|
"author": "Ionic Team <hi@ionic.io> (https://ionic.io)",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"verify": "./gradlew clean lint build test -b capacitor/build.gradle"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"@capacitor/core": "^9.0.0-alpha.
|
|
29
|
+
"@capacitor/core": "^9.0.0-alpha.4"
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|