Skip to content

Commit 43f3c22

Browse files
Support kotlin and Expo SDK 50 for Android (#249)
* Support Expo 50 - Adds support for Kotlin (MainApplication.kt) * Remove rm command in prepare_release.sh temporarily * Upgrade expo dev dependency
1 parent 15d3e1d commit 43f3c22

File tree

5 files changed

+1364
-1872
lines changed

5 files changed

+1364
-1872
lines changed

dist/plugins/withViroAndroid.js

Lines changed: 30 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -11,53 +11,32 @@ const insertLinesHelper_1 = require("./util/insertLinesHelper");
1111
let viroPluginConfig = ["AR"];
1212
const withBranchAndroid = (config) => {
1313
// Directly edit MainApplication.java
14-
config = (0, config_plugins_1.withDangerousMod)(config, [
14+
return (0, config_plugins_1.withDangerousMod)(config, [
1515
"android",
1616
async (config) => {
17-
const mainApplicationPath = path_1.default.join(config.modRequest.platformProjectRoot, "app", "src", "main", "java", ...(config?.android?.package?.split?.(".") || []), "MainApplication.java");
18-
const root = config.modRequest.platformProjectRoot;
17+
let mainApplicationPath = "";
18+
let isJava;
19+
const mainApplicationPrefix = path_1.default.join(config.modRequest.platformProjectRoot, "app", "src", "main", "java", ...(config?.android?.package?.split?.(".") || []));
20+
const mainApplicationPathJava = path_1.default.join(mainApplicationPrefix, "MainApplication.java");
21+
const mainApplicationPathKotlin = path_1.default.join(mainApplicationPrefix, "MainApplication.kt");
22+
if (fs_1.default.existsSync(mainApplicationPathJava)) {
23+
isJava = true;
24+
mainApplicationPath = mainApplicationPathJava;
25+
}
26+
else if (fs_1.default.existsSync(mainApplicationPathKotlin)) {
27+
isJava = false;
28+
mainApplicationPath = mainApplicationPathKotlin;
29+
}
30+
else {
31+
throw new Error("MainApplication.kt or MainApplication.java file not found.");
32+
}
1933
fs_1.default.readFile(mainApplicationPath, "utf-8", (err, data) => {
20-
data = (0, insertLinesHelper_1.insertLinesHelper)("import com.viromedia.bridge.ReactViroPackage;", `package ${config?.android?.package};`, data);
21-
/**
22-
* ********************************************************************
23-
* Sample app.json with property config
24-
* Options: "AR", "GVR", "OVR_MOBILE"
25-
*
26-
* https://docs.expo.dev/guides/config-plugins/#using-a-plugin-in-your-app
27-
* ********************************************************************
28-
*
29-
* plugins: [
30-
* [
31-
* "@viro-community/react-viro",
32-
* {
33-
* android: {
34-
* xRMode: "GVR"
35-
* }
36-
* }
37-
* ]
38-
* ],
39-
*
40-
* ********************************************************************
41-
* Sample app.json with multiple options for Viro config
42-
* The default configuration is "AR"
43-
* ********************************************************************
44-
* plugins: [
45-
* [
46-
* "@viro-community/react-viro",
47-
* {
48-
* android: {
49-
* xRMode: ["GVR", "AR"]
50-
* }
51-
* }
52-
* ]
53-
* ],
54-
* ********************************************************************
55-
* Sample app.json without property config
56-
* ********************************************************************
57-
*
58-
* plugins: [ "@viro-community/react-viro" ],
59-
*
60-
*/
34+
if (isJava) {
35+
data = (0, insertLinesHelper_1.insertLinesHelper)("import com.viromedia.bridge.ReactViroPackage;", `package ${config?.android?.package};`, data);
36+
}
37+
else {
38+
data = (0, insertLinesHelper_1.insertLinesHelper)("import com.viromedia.bridge.ReactViroPackage", `package ${config?.android?.package}`, data);
39+
}
6140
const viroPlugin = config?.plugins?.find((plugin) => Array.isArray(plugin) && plugin[0] === "@viro-community/react-viro");
6241
if (Array.isArray(viroPlugin)) {
6342
if (Array.isArray(viroPlugin[1].android?.xRMode)) {
@@ -71,9 +50,14 @@ const withBranchAndroid = (config) => {
7150
for (const viroConfig of viroPluginConfig) {
7251
target =
7352
target +
74-
` packages.add(new ReactViroPackage(ReactViroPackage.ViroPlatform.valueOf("${viroConfig}")));\n`;
53+
` packages.add(new ReactViroPackage(ReactViroPackage.ViroPlatform.valueOf("${viroConfig}")))${isJava ? ";" : ""}\n`;
54+
}
55+
if (isJava) {
56+
data = (0, insertLinesHelper_1.insertLinesHelper)(target, "List<ReactPackage> packages = new PackageList(this).getPackages();", data);
57+
}
58+
else {
59+
data = (0, insertLinesHelper_1.insertLinesHelper)(target, "override fun getPackages(): List<ReactPackage> {", data);
7560
}
76-
data = (0, insertLinesHelper_1.insertLinesHelper)(target, "List<ReactPackage> packages = new PackageList(this).getPackages();", data);
7761
fs_1.default.writeFile(mainApplicationPath, data, "utf-8", function (err) {
7862
if (err)
7963
console.log("Error writing MainApplication.java");
@@ -82,7 +66,6 @@ const withBranchAndroid = (config) => {
8266
return config;
8367
},
8468
]);
85-
return config;
8669
};
8770
const withViroProjectBuildGradle = (config) => (0, config_plugins_1.withProjectBuildGradle)(config, async (newConfig) => {
8871
newConfig.modResults.contents = newConfig.modResults.contents.replace(/minSdkVersion.*/, `minSdkVersion = 24`);

0 commit comments

Comments
 (0)