Skip to content
This repository was archived by the owner on Aug 7, 2021. It is now read-only.

Commit bb54db1

Browse files
authored
refactor: remove android-runtime 3.4< specific code (#520)
The plugin now works with 4.0+, so the logic for lower versions of the android runtime is no longer needed.
1 parent 8922c96 commit bb54db1

File tree

5 files changed

+96
-108
lines changed

5 files changed

+96
-108
lines changed

Diff for: androidProjectHelpers.js

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
const { join, resolve } = require("path");
2+
const { existsSync, readFileSync } = require("fs");
3+
4+
const { getPackageJson } = require("./projectHelpers");
5+
6+
const PLATFORMS_ANDROID = "platforms/android";
7+
const ANDROID_PROJECT_DIR = join(PLATFORMS_ANDROID, "app");
8+
const ANDROID_APP_PATH = join(ANDROID_PROJECT_DIR, "src/main/assets/app");
9+
const ANDROID_CONFIGURATIONS_PATH = join(ANDROID_PROJECT_DIR, "build/configurations");
10+
11+
const getAndroidRuntimeVersion = (projectDir) => {
12+
try {
13+
const projectPackageJSON = getPackageJson(projectDir);
14+
15+
const version = projectPackageJSON["nativescript"]["tns-android"]["version"];
16+
return version && toReleaseVersion(version);
17+
} catch (e) {
18+
return null;
19+
}
20+
}
21+
22+
const toReleaseVersion = version => version.replace(/-.*/, "");
23+
24+
const getAndroidV8Version = (projectDir) => {
25+
try {
26+
const androidSettingsJSON = getAndroidSettingsJson(projectDir);
27+
if (androidSettingsJSON !== null) {
28+
return androidSettingsJSON.v8Version;
29+
} else {
30+
return null;
31+
}
32+
} catch (e) {
33+
return null;
34+
}
35+
}
36+
37+
const getAndroidSettingsJson = projectDir => {
38+
const androidSettingsJsonPath = resolve(projectDir, PLATFORMS_ANDROID, "settings.json");
39+
if (existsSync(androidSettingsJsonPath)) {
40+
return JSON.parse(readFileSync(androidSettingsJsonPath, "utf8"));
41+
} else {
42+
return null;
43+
}
44+
};
45+
46+
module.exports = {
47+
ANDROID_PROJECT_DIR,
48+
ANDROID_APP_PATH,
49+
ANDROID_CONFIGURATIONS_PATH,
50+
getAndroidRuntimeVersion,
51+
getAndroidV8Version,
52+
};

Diff for: index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
const path = require("path");
22
const { existsSync } = require("fs");
33

4+
const { ANDROID_APP_PATH } = require("./androidProjectHelpers");
45
const {
56
getPackageJson,
67
isAngular,
78
isAndroid,
89
isIos,
9-
resolveAndroidAppPath,
1010
} = require("./projectHelpers");
1111

1212
Object.assign(exports, require('./plugins'));
@@ -54,7 +54,7 @@ exports.getAppPath = (platform, projectDir) => {
5454

5555
return `platforms/ios/${sanitizedName}/app`;
5656
} else if (isAndroid(platform)) {
57-
return resolveAndroidAppPath(projectDir);
57+
return ANDROID_APP_PATH;
5858
} else {
5959
throw new Error(`Invalid platform: ${platform}`);
6060
}

Diff for: plugins/NativeScriptSnapshotPlugin/index.js

+12-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ const { closeSync, openSync, writeFileSync } = require("fs");
33
const validateOptions = require("schema-utils");
44

55
const ProjectSnapshotGenerator = require("../../snapshot/android/project-snapshot-generator");
6-
const { resolveAndroidAppPath, getAndroidProjectPath } = require("../../projectHelpers");
6+
const {
7+
ANDROID_PROJECT_DIR,
8+
ANDROID_APP_PATH,
9+
} = require("../../androidProjectHelpers");
710
const schema = require("./options.json");
811

912
const SNAPSHOT_ENTRY_NAME = "snapshot-entry";
@@ -34,10 +37,9 @@ exports.NativeScriptSnapshotPlugin = (function() {
3437
}
3538

3639
NativeScriptSnapshotPlugin.ensureSnapshotModuleEntry = function(options) {
37-
const { webpackConfig, requireModules, chunks, projectRoot, includeApplicationCss } = options;
40+
const { webpackConfig, requireModules, chunks, includeApplicationCss } = options;
3841

39-
const androidProjectPath = getAndroidProjectPath({ projectRoot: projectRoot });
40-
const snapshotEntryPath = join(androidProjectPath, SNAPSHOT_ENTRY_MODULE);
42+
const snapshotEntryPath = join(ANDROID_PROJECT_DIR, SNAPSHOT_ENTRY_MODULE);
4143

4244
let snapshotEntryContent = "";
4345
if (includeApplicationCss) {
@@ -81,10 +83,13 @@ exports.NativeScriptSnapshotPlugin = (function() {
8183
NativeScriptSnapshotPlugin.prototype.generate = function (webpackChunks) {
8284
const options = this.options;
8385
const inputFiles = webpackChunks.map(chunk => join(options.webpackConfig.output.path, chunk.files[0]));
84-
console.log(`\n Snapshotting bundle from ${inputFiles}`);
86+
const preprocessedInputFile = join(
87+
this.options.projectRoot,
88+
ANDROID_APP_PATH,
89+
"_embedded_script_.js"
90+
);
8591

86-
const preparedAppRootPath = resolveAndroidAppPath(this.options.projectRoot);
87-
const preprocessedInputFile = join(preparedAppRootPath, "_embedded_script_.js");
92+
console.log(`\n Snapshotting bundle from ${inputFiles}`);
8893

8994
return ProjectSnapshotGenerator.prototype.generate.call(this, {
9095
inputFiles,

Diff for: projectHelpers.js

+12-87
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
const path = require("path");
2-
const fs = require("fs");
3-
const semver = require("semver");
1+
const { resolve } = require("path");
2+
const { readFileSync, writeFileSync } = require("fs");
43
const { EOL } = require("os");
4+
55
const hook = require("nativescript-hook")(__dirname);
66

77
const PROJECT_DATA_GETTERS = {
88
appPath: "getAppDirectoryRelativePath",
99
appResourcesPath: "getAppResourcesRelativeDirectoryPath",
1010
};
1111

12-
const APP_DIR = "app";
13-
const ANDROID_PROJECT_PATH = "platforms/android";
14-
1512
const isTypeScript = ({ projectDir, packageJson } = {}) => {
1613
packageJson = packageJson || getPackageJson(projectDir);
1714

@@ -33,42 +30,19 @@ const isAngular = ({ projectDir, packageJson } = {}) => {
3330

3431
const isSass = ({ projectDir, packageJson } = {}) => {
3532
packageJson = packageJson || getPackageJson(projectDir);
33+
const SASS_PLUGIN_NAME = "nativescript-dev-sass";
3634

3735
return (
3836
packageJson.dependencies &&
39-
packageJson.dependencies.hasOwnProperty("nativescript-dev-sass")
37+
packageJson.dependencies.hasOwnProperty(SASS_PLUGIN_NAME)
4038
) || (
41-
packageJson.devDependencies &&
42-
packageJson.devDependencies.hasOwnProperty("nativescript-dev-sass")
43-
);
39+
packageJson.devDependencies &&
40+
packageJson.devDependencies.hasOwnProperty(SASS_PLUGIN_NAME)
41+
);
4442
};
4543

46-
const getAndroidRuntimeVersion = (projectDir) => {
47-
try {
48-
const projectPackageJSON = getPackageJson(projectDir);
49-
50-
const version = projectPackageJSON["nativescript"]["tns-android"]["version"];
51-
return version && toReleaseVersion(version);
52-
} catch (e) {
53-
return null;
54-
}
55-
}
56-
57-
const getAndroidV8Version = (projectDir) => {
58-
try {
59-
const androidSettingsJSON = getAndroidSettingsJson(projectDir);
60-
if(androidSettingsJSON != null) {
61-
return androidSettingsJSON.v8Version;
62-
} else {
63-
return null;
64-
}
65-
} catch (e) {
66-
return null;
67-
}
68-
}
69-
7044
const getWebpackConfig = (projectDir, env, configPath = "webpack.config.js") => {
71-
const configAbsolutePath = path.resolve(projectDir, configPath);
45+
const configAbsolutePath = resolve(projectDir, configPath);
7246
let config;
7347

7448
try {
@@ -92,59 +66,16 @@ const getWebpackConfig = (projectDir, env, configPath = "webpack.config.js") =>
9266

9367
const getPackageJson = projectDir => {
9468
const packageJsonPath = getPackageJsonPath(projectDir);
95-
return JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
96-
};
97-
98-
const getAndroidSettingsJson = projectDir => {
99-
const androidSettingsJsonPath = path.resolve(projectDir, ANDROID_PROJECT_PATH, "settings.json");
100-
if (fs.existsSync(androidSettingsJsonPath)) {
101-
return JSON.parse(fs.readFileSync(androidSettingsJsonPath, "utf8"));
102-
} else {
103-
return null;
104-
}
69+
return JSON.parse(readFileSync(packageJsonPath, "utf8"));
10570
};
10671

10772
const writePackageJson = (content, projectDir) => {
10873
const packageJsonPath = getPackageJsonPath(projectDir);
109-
fs.writeFileSync(packageJsonPath, JSON.stringify(content, null, 2))
74+
writeFileSync(packageJsonPath, JSON.stringify(content, null, 2))
11075
}
11176
const getProjectDir = hook.findProjectDir;
11277

113-
const toReleaseVersion = version =>
114-
version.replace(/-.*/, "");
115-
116-
const getAndroidProjectPath = ({androidPackageVersion, projectRoot}) => {
117-
if (projectRoot) {
118-
androidPackageVersion = getAndroidRuntimeVersion(projectRoot);
119-
}
120-
121-
return semver.lt(androidPackageVersion, "3.4.0") ?
122-
ANDROID_PROJECT_PATH :
123-
path.join(ANDROID_PROJECT_PATH, APP_DIR);
124-
};
125-
126-
127-
const resolveAndroidAppPath = projectDir => {
128-
const RESOURCES_PATH = "src/main/assets/app";
129-
const androidPackageVersion = getAndroidRuntimeVersion(projectDir);
130-
const androidProjectPath = getAndroidProjectPath({androidPackageVersion});
131-
132-
return path.join(projectDir, androidProjectPath, RESOURCES_PATH);
133-
};
134-
135-
const resolveAndroidConfigurationsPath = projectDir => {
136-
const CONFIGURATIONS_DIR = "configurations";
137-
const androidPackageVersion = getAndroidRuntimeVersion(projectDir);
138-
const androidProjectPath = getAndroidProjectPath({androidPackageVersion});
139-
140-
const configurationsPath = semver.lt(androidPackageVersion, "3.3.0") ?
141-
path.join(androidProjectPath, CONFIGURATIONS_DIR):
142-
path.join(androidProjectPath, "build", CONFIGURATIONS_DIR);
143-
144-
return path.join(projectDir, configurationsPath);
145-
};
146-
147-
const getPackageJsonPath = projectDir => path.resolve(projectDir, "package.json");
78+
const getPackageJsonPath = projectDir => resolve(projectDir, "package.json");
14879

14980
const isAndroid = platform => /android/i.test(platform);
15081
const isIos = platform => /ios/i.test(platform);
@@ -173,12 +104,8 @@ function safeGet(object, property, ...args) {
173104
}
174105

175106
module.exports = {
176-
APP_DIR,
177107
getAppPathFromProjectData,
178108
getAppResourcesPathFromProjectData,
179-
getAndroidProjectPath,
180-
getAndroidRuntimeVersion,
181-
getAndroidV8Version,
182109
getPackageJson,
183110
getProjectDir,
184111
getWebpackConfig,
@@ -187,7 +114,5 @@ module.exports = {
187114
isAngular,
188115
isSass,
189116
isTypeScript,
190-
resolveAndroidAppPath,
191-
resolveAndroidConfigurationsPath,
192117
writePackageJson,
193118
};

Diff for: snapshot/android/project-snapshot-generator.js

+18-12
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ const {
1010
createDirectory,
1111
getJsonFile,
1212
} = require("./utils");
13+
const { getPackageJson } = require("../../projectHelpers");
1314
const {
14-
getPackageJson,
15+
ANDROID_PROJECT_DIR,
16+
ANDROID_APP_PATH,
17+
ANDROID_CONFIGURATIONS_PATH,
1518
getAndroidRuntimeVersion,
16-
getAndroidProjectPath,
1719
getAndroidV8Version,
18-
resolveAndroidAppPath,
19-
resolveAndroidConfigurationsPath,
20-
} = require("../../projectHelpers");
20+
} = require("../../androidProjectHelpers");
2121

2222
const MIN_ANDROID_RUNTIME_VERSION = "3.0.0";
2323
const VALID_ANDROID_RUNTIME_TAGS = Object.freeze(["next", "rc"]);
@@ -55,8 +55,15 @@ ProjectSnapshotGenerator.prototype.getBuildPath = function () {
5555
}
5656

5757
ProjectSnapshotGenerator.calculateProjectPath = function (projectRoot) {
58-
const projectPath = getAndroidProjectPath({projectRoot});
59-
return join(projectRoot, projectPath);
58+
return join(projectRoot, ANDROID_PROJECT_DIR);
59+
}
60+
61+
ProjectSnapshotGenerator.calculateConfigurationsPath = function (projectRoot) {
62+
return join(projectRoot, ANDROID_CONFIGURATIONS_PATH);
63+
}
64+
65+
ProjectSnapshotGenerator.calculateAppPath = function (projectRoot) {
66+
return join(projectRoot, ANDROID_APP_PATH);
6067
}
6168

6269
ProjectSnapshotGenerator.prototype.getProjectPath = function () {
@@ -70,16 +77,16 @@ ProjectSnapshotGenerator.cleanSnapshotArtefacts = function (projectRoot) {
7077
shelljs.rm("-rf", join(platformPath, "src/main/assets/snapshots"));
7178

7279
// Remove prepared include.gradle configurations
73-
const configurationsPath = resolveAndroidConfigurationsPath(projectRoot);
80+
const configurationsPath = ProjectSnapshotGenerator.calculateConfigurationsPath(projectRoot);
7481
shelljs.rm("-rf", join(configurationsPath, SnapshotGenerator.SNAPSHOT_PACKAGE_NANE));
7582
}
7683

7784
ProjectSnapshotGenerator.installSnapshotArtefacts = function (projectRoot) {
7885
const buildPath = ProjectSnapshotGenerator.calculateBuildPath(projectRoot);
7986
const platformPath = ProjectSnapshotGenerator.calculateProjectPath(projectRoot);
8087

81-
const appPath = resolveAndroidAppPath(projectRoot);
82-
const configurationsPath = resolveAndroidConfigurationsPath(projectRoot);
88+
const appPath = ProjectSnapshotGenerator.calculateAppPath(projectRoot);
89+
const configurationsPath = ProjectSnapshotGenerator.calculateConfigurationsPath(projectRoot);
8390
const configDestinationPath = join(configurationsPath, SnapshotGenerator.SNAPSHOT_PACKAGE_NANE);
8491

8592
// Remove build folder to make sure that the apk will be fully rebuild
@@ -96,8 +103,7 @@ ProjectSnapshotGenerator.installSnapshotArtefacts = function (projectRoot) {
96103
// Copy the libs to the specified destination in the platforms folder
97104
shelljs.mkdir("-p", libsDestinationPath);
98105
shelljs.cp("-R", join(buildPath, "ndk-build/libs") + "/", libsDestinationPath);
99-
}
100-
else {
106+
} else {
101107
// useLibs = false
102108
const blobsSrcPath = join(buildPath, "snapshots/blobs");
103109
const blobsDestinationPath = resolve(appPath, "../snapshots");

0 commit comments

Comments
 (0)