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

refactor: remove android-runtime 3.4< specific code #520

Merged
merged 1 commit into from
May 15, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions androidProjectHelpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
const { join, resolve } = require("path");
const { existsSync, readFileSync } = require("fs");

const { getPackageJson } = require("./projectHelpers");

const PLATFORMS_ANDROID = "platforms/android";
const ANDROID_PROJECT_DIR = join(PLATFORMS_ANDROID, "app");
const ANDROID_APP_PATH = join(ANDROID_PROJECT_DIR, "src/main/assets/app");
const ANDROID_CONFIGURATIONS_PATH = join(ANDROID_PROJECT_DIR, "build/configurations");

const getAndroidRuntimeVersion = (projectDir) => {
try {
const projectPackageJSON = getPackageJson(projectDir);

const version = projectPackageJSON["nativescript"]["tns-android"]["version"];
return version && toReleaseVersion(version);
} catch (e) {
return null;
}
}

const toReleaseVersion = version => version.replace(/-.*/, "");

const getAndroidV8Version = (projectDir) => {
try {
const androidSettingsJSON = getAndroidSettingsJson(projectDir);
if (androidSettingsJSON !== null) {
return androidSettingsJSON.v8Version;
} else {
return null;
}
} catch (e) {
return null;
}
}

const getAndroidSettingsJson = projectDir => {
const androidSettingsJsonPath = resolve(projectDir, PLATFORMS_ANDROID, "settings.json");
if (existsSync(androidSettingsJsonPath)) {
return JSON.parse(readFileSync(androidSettingsJsonPath, "utf8"));
} else {
return null;
}
};

module.exports = {
ANDROID_PROJECT_DIR,
ANDROID_APP_PATH,
ANDROID_CONFIGURATIONS_PATH,
getAndroidRuntimeVersion,
getAndroidV8Version,
};
4 changes: 2 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const path = require("path");
const { existsSync } = require("fs");

const { ANDROID_APP_PATH } = require("./androidProjectHelpers");
const {
getPackageJson,
isAngular,
isAndroid,
isIos,
resolveAndroidAppPath,
} = require("./projectHelpers");

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

return `platforms/ios/${sanitizedName}/app`;
} else if (isAndroid(platform)) {
return resolveAndroidAppPath(projectDir);
return ANDROID_APP_PATH;
} else {
throw new Error(`Invalid platform: ${platform}`);
}
Expand Down
19 changes: 12 additions & 7 deletions plugins/NativeScriptSnapshotPlugin/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ const { closeSync, openSync, writeFileSync } = require("fs");
const validateOptions = require("schema-utils");

const ProjectSnapshotGenerator = require("../../snapshot/android/project-snapshot-generator");
const { resolveAndroidAppPath, getAndroidProjectPath } = require("../../projectHelpers");
const {
ANDROID_PROJECT_DIR,
ANDROID_APP_PATH,
} = require("../../androidProjectHelpers");
const schema = require("./options.json");

const SNAPSHOT_ENTRY_NAME = "snapshot-entry";
Expand Down Expand Up @@ -34,10 +37,9 @@ exports.NativeScriptSnapshotPlugin = (function() {
}

NativeScriptSnapshotPlugin.ensureSnapshotModuleEntry = function(options) {
const { webpackConfig, requireModules, chunks, projectRoot, includeApplicationCss } = options;
const { webpackConfig, requireModules, chunks, includeApplicationCss } = options;

const androidProjectPath = getAndroidProjectPath({ projectRoot: projectRoot });
const snapshotEntryPath = join(androidProjectPath, SNAPSHOT_ENTRY_MODULE);
const snapshotEntryPath = join(ANDROID_PROJECT_DIR, SNAPSHOT_ENTRY_MODULE);

let snapshotEntryContent = "";
if (includeApplicationCss) {
Expand Down Expand Up @@ -81,10 +83,13 @@ exports.NativeScriptSnapshotPlugin = (function() {
NativeScriptSnapshotPlugin.prototype.generate = function (webpackChunks) {
const options = this.options;
const inputFiles = webpackChunks.map(chunk => join(options.webpackConfig.output.path, chunk.files[0]));
console.log(`\n Snapshotting bundle from ${inputFiles}`);
const preprocessedInputFile = join(
this.options.projectRoot,
ANDROID_APP_PATH,
"_embedded_script_.js"
);

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

return ProjectSnapshotGenerator.prototype.generate.call(this, {
inputFiles,
Expand Down
99 changes: 12 additions & 87 deletions projectHelpers.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
const path = require("path");
const fs = require("fs");
const semver = require("semver");
const { resolve } = require("path");
const { readFileSync, writeFileSync } = require("fs");
const { EOL } = require("os");

const hook = require("nativescript-hook")(__dirname);

const PROJECT_DATA_GETTERS = {
appPath: "getAppDirectoryRelativePath",
appResourcesPath: "getAppResourcesRelativeDirectoryPath",
};

const APP_DIR = "app";
const ANDROID_PROJECT_PATH = "platforms/android";

const isTypeScript = ({ projectDir, packageJson } = {}) => {
packageJson = packageJson || getPackageJson(projectDir);

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

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

return (
packageJson.dependencies &&
packageJson.dependencies.hasOwnProperty("nativescript-dev-sass")
packageJson.dependencies.hasOwnProperty(SASS_PLUGIN_NAME)
) || (
packageJson.devDependencies &&
packageJson.devDependencies.hasOwnProperty("nativescript-dev-sass")
);
packageJson.devDependencies &&
packageJson.devDependencies.hasOwnProperty(SASS_PLUGIN_NAME)
);
};

const getAndroidRuntimeVersion = (projectDir) => {
try {
const projectPackageJSON = getPackageJson(projectDir);

const version = projectPackageJSON["nativescript"]["tns-android"]["version"];
return version && toReleaseVersion(version);
} catch (e) {
return null;
}
}

const getAndroidV8Version = (projectDir) => {
try {
const androidSettingsJSON = getAndroidSettingsJson(projectDir);
if(androidSettingsJSON != null) {
return androidSettingsJSON.v8Version;
} else {
return null;
}
} catch (e) {
return null;
}
}

const getWebpackConfig = (projectDir, env, configPath = "webpack.config.js") => {
const configAbsolutePath = path.resolve(projectDir, configPath);
const configAbsolutePath = resolve(projectDir, configPath);
let config;

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

const getPackageJson = projectDir => {
const packageJsonPath = getPackageJsonPath(projectDir);
return JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
};

const getAndroidSettingsJson = projectDir => {
const androidSettingsJsonPath = path.resolve(projectDir, ANDROID_PROJECT_PATH, "settings.json");
if (fs.existsSync(androidSettingsJsonPath)) {
return JSON.parse(fs.readFileSync(androidSettingsJsonPath, "utf8"));
} else {
return null;
}
return JSON.parse(readFileSync(packageJsonPath, "utf8"));
};

const writePackageJson = (content, projectDir) => {
const packageJsonPath = getPackageJsonPath(projectDir);
fs.writeFileSync(packageJsonPath, JSON.stringify(content, null, 2))
writeFileSync(packageJsonPath, JSON.stringify(content, null, 2))
}
const getProjectDir = hook.findProjectDir;

const toReleaseVersion = version =>
version.replace(/-.*/, "");

const getAndroidProjectPath = ({androidPackageVersion, projectRoot}) => {
if (projectRoot) {
androidPackageVersion = getAndroidRuntimeVersion(projectRoot);
}

return semver.lt(androidPackageVersion, "3.4.0") ?
ANDROID_PROJECT_PATH :
path.join(ANDROID_PROJECT_PATH, APP_DIR);
};


const resolveAndroidAppPath = projectDir => {
const RESOURCES_PATH = "src/main/assets/app";
const androidPackageVersion = getAndroidRuntimeVersion(projectDir);
const androidProjectPath = getAndroidProjectPath({androidPackageVersion});

return path.join(projectDir, androidProjectPath, RESOURCES_PATH);
};

const resolveAndroidConfigurationsPath = projectDir => {
const CONFIGURATIONS_DIR = "configurations";
const androidPackageVersion = getAndroidRuntimeVersion(projectDir);
const androidProjectPath = getAndroidProjectPath({androidPackageVersion});

const configurationsPath = semver.lt(androidPackageVersion, "3.3.0") ?
path.join(androidProjectPath, CONFIGURATIONS_DIR):
path.join(androidProjectPath, "build", CONFIGURATIONS_DIR);

return path.join(projectDir, configurationsPath);
};

const getPackageJsonPath = projectDir => path.resolve(projectDir, "package.json");
const getPackageJsonPath = projectDir => resolve(projectDir, "package.json");

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

module.exports = {
APP_DIR,
getAppPathFromProjectData,
getAppResourcesPathFromProjectData,
getAndroidProjectPath,
getAndroidRuntimeVersion,
getAndroidV8Version,
getPackageJson,
getProjectDir,
getWebpackConfig,
Expand All @@ -187,7 +114,5 @@ module.exports = {
isAngular,
isSass,
isTypeScript,
resolveAndroidAppPath,
resolveAndroidConfigurationsPath,
writePackageJson,
};
30 changes: 18 additions & 12 deletions snapshot/android/project-snapshot-generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ const {
createDirectory,
getJsonFile,
} = require("./utils");
const { getPackageJson } = require("../../projectHelpers");
const {
getPackageJson,
ANDROID_PROJECT_DIR,
ANDROID_APP_PATH,
ANDROID_CONFIGURATIONS_PATH,
getAndroidRuntimeVersion,
getAndroidProjectPath,
getAndroidV8Version,
resolveAndroidAppPath,
resolveAndroidConfigurationsPath,
} = require("../../projectHelpers");
} = require("../../androidProjectHelpers");

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

ProjectSnapshotGenerator.calculateProjectPath = function (projectRoot) {
const projectPath = getAndroidProjectPath({projectRoot});
return join(projectRoot, projectPath);
return join(projectRoot, ANDROID_PROJECT_DIR);
}

ProjectSnapshotGenerator.calculateConfigurationsPath = function (projectRoot) {
return join(projectRoot, ANDROID_CONFIGURATIONS_PATH);
}

ProjectSnapshotGenerator.calculateAppPath = function (projectRoot) {
return join(projectRoot, ANDROID_APP_PATH);
}

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

// Remove prepared include.gradle configurations
const configurationsPath = resolveAndroidConfigurationsPath(projectRoot);
const configurationsPath = ProjectSnapshotGenerator.calculateConfigurationsPath(projectRoot);
shelljs.rm("-rf", join(configurationsPath, SnapshotGenerator.SNAPSHOT_PACKAGE_NANE));
}

ProjectSnapshotGenerator.installSnapshotArtefacts = function (projectRoot) {
const buildPath = ProjectSnapshotGenerator.calculateBuildPath(projectRoot);
const platformPath = ProjectSnapshotGenerator.calculateProjectPath(projectRoot);

const appPath = resolveAndroidAppPath(projectRoot);
const configurationsPath = resolveAndroidConfigurationsPath(projectRoot);
const appPath = ProjectSnapshotGenerator.calculateAppPath(projectRoot);
const configurationsPath = ProjectSnapshotGenerator.calculateConfigurationsPath(projectRoot);
const configDestinationPath = join(configurationsPath, SnapshotGenerator.SNAPSHOT_PACKAGE_NANE);

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