Skip to content

Optimize package size. Native Android plugins need to declare usage of v8 symbols explicitly in package.json now. #588

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 25, 2016
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
'use strict';

let args = process.argv;
let dependencies = JSON.parse(args[2]);
let platformsDir = args[3];

const path = require("path"),
fs = require("fs");

if (dependencies) {
let platformDir = path.join(platformsDir, "android");
let buildDir = path.join(platformDir, "build-tools");
let useV8File = path.join(buildDir, 'useV8');

try {
fs.unlinkSync(useV8File);
} catch (e) {

}

let useV8Symbols = false;

for (let dependencyName in dependencies) {
let dependency = dependencies[dependencyName];

let isPlugin = !!dependency.nativescript;
if (isPlugin) {
let consumesV8Symbols = !!dependency.nativescript.useV8symbols;
if (consumesV8Symbols) {
useV8Symbols = true;
break;
}
}
}

if (useV8Symbols) {
fs.writeFileSync(useV8File, "1");
}
}
18 changes: 17 additions & 1 deletion build-artifacts/project-template-gradle/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,27 @@ dependencies {
// compile files("$rootDir/libs/aar") {
// builtBy 'copyAarDependencies'
// }

copyNativeScriptAar()

compile project(':runtime')
}


def copyNativeScriptAar() {
def useV8SymbolsFlag = new File("$projectDir/build-tools/useV8");
def runtimeAarType = "optimized";
if (useV8SymbolsFlag.exists() && !useV8SymbolsFlag.isDirectory()) {
println "Using less-optimized runtime bundle.";
runtimeAarType = "regular";
}

copy {
from "$projectDir/libs/runtime-libs/nativescript-${runtimeAarType}.aar"
into "$projectDir/libs/runtime-libs/"
rename "nativescript-${runtimeAarType}.aar", "nativescript.aar"
}
}

////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// CONFIGURATION PHASE //////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
Expand Down
33 changes: 29 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -108,23 +108,48 @@ task generateBindingGenerator (type: Exec) {
}
}

task generateRuntime (type: Exec) {
task generateRuntime {
doFirst {
tasks.generateOptimizedRuntimeAar.execute();
tasks.generateRuntimeAar.execute();
}
}

task generateOptimizedRuntimeAar(type: Exec) {
doFirst {
workingDir "$rootDir/runtime"
if(isWinOs) {
commandLine "cmd", "/c", "gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true", "-Poptimized"
}
else {
commandLine "./gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true", "-Poptimized"
}
}
}

task generateRuntimeAar(type: Exec) {
doFirst {
workingDir "$rootDir/runtime"
if(isWinOs) {
commandLine "cmd", "/c", "gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true"
}
else {
commandLine "./gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true"
}
}
}
}

task copyGeneratedRuntime << {
copy {
from "$rootDir/runtime/build/outputs/aar/runtime-release.aar"
from "$rootDir/runtime/build/outputs/aar/runtime-regular-release.aar"
into "$rootDir/dist/framework/libs/runtime-libs/"
rename "runtime-regular-release.aar", "nativescript-regular.aar"
}

copy {
from "$rootDir/runtime/build/outputs/aar/runtime-optimized-release.aar"
into "$rootDir/dist/framework/libs/runtime-libs/"
rename "runtime-release.aar", "nativescript.aar"
rename "runtime-optimized-release.aar", "nativescript-optimized.aar"
}
}

Expand Down
19 changes: 19 additions & 0 deletions runtime/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ allprojects {
}

def ndkDebuggable = false;
def optimized = project.hasProperty("optimized")

if(optimized) {
println "Optimized build triggered."
}

List<String> runTasks = gradle.startParameter.getTaskNames();
for (String runTask : runTasks) {
Expand Down Expand Up @@ -196,6 +200,12 @@ model {
buildToolsVersion = project.ext._buildToolsVersion

defaultConfig.with {
if(optimized) {
project.archivesBaseName = "${archivesBaseName}-optimized"
} else {
project.archivesBaseName = "${archivesBaseName}-regular"
}

minSdkVersion.apiLevel = 17
targetSdkVersion.apiLevel = 22
}
Expand All @@ -219,6 +229,10 @@ model {

ldLibs.addAll(["android", "dl", "log", "atomic", "z"])

if(optimized) {
ldFlags.addAll(["-Wl,--exclude-libs=ALL", "-Wl,--gc-sections"])
}

stl = "c++_static"

abiFilters.addAll(["armeabi-v7a", "x86", "arm64-v8a"])
Expand Down Expand Up @@ -255,6 +269,11 @@ model {

ndk {
debuggable = ndkDebuggable

if (optimized) {
cppFlags.addAll(["-O3", "-fvisibility=hidden", "-ffunction-sections", "-fno-data-sections", "-Wl,--exclude-libs=ALL", "-Wl,--gc-sections"])
CFlags.addAll(["-O3", "-fvisibility=hidden", "-ffunction-sections", "-fno-data-sections", "-Wl,--exclude-libs=ALL", "--Wl,-gc-sections"])
}
}

setRuntimeCommit.dependsOn(setPackageVersion)
Expand Down
2 changes: 1 addition & 1 deletion runtime/src/main/jni/com_tns_AssetExtractor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
using namespace tns;
using namespace std;

extern "C" void Java_com_tns_AssetExtractor_extractAssets(JNIEnv *env, jobject obj, jstring apk, jstring inputDir, jstring outputDir, jboolean _forceOverwrite)
extern "C" JNIEXPORT void Java_com_tns_AssetExtractor_extractAssets(JNIEnv *env, jobject obj, jstring apk, jstring inputDir, jstring outputDir, jboolean _forceOverwrite)
{
try
{
Expand Down
12 changes: 6 additions & 6 deletions runtime/src/main/jni/com_tns_JsDebugger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
using namespace tns;
using namespace std;

extern "C" void Java_com_tns_JsDebugger_processDebugMessages(JNIEnv *env, jobject obj)
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_processDebugMessages(JNIEnv *env, jobject obj)
{
try
{
Expand All @@ -28,7 +28,7 @@ extern "C" void Java_com_tns_JsDebugger_processDebugMessages(JNIEnv *env, jobjec
}
}

extern "C" void Java_com_tns_JsDebugger_enable(JNIEnv *env, jobject obj)
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_enable(JNIEnv *env, jobject obj)
{
try
{
Expand All @@ -50,7 +50,7 @@ extern "C" void Java_com_tns_JsDebugger_enable(JNIEnv *env, jobject obj)
}
}

extern "C" void Java_com_tns_JsDebugger_disable(JNIEnv *env, jobject obj)
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_disable(JNIEnv *env, jobject obj)
{
try
{
Expand All @@ -72,7 +72,7 @@ extern "C" void Java_com_tns_JsDebugger_disable(JNIEnv *env, jobject obj)
}
}

extern "C" void Java_com_tns_JsDebugger_debugBreak(JNIEnv *env, jobject obj)
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_debugBreak(JNIEnv *env, jobject obj)
{
try
{
Expand All @@ -94,7 +94,7 @@ extern "C" void Java_com_tns_JsDebugger_debugBreak(JNIEnv *env, jobject obj)
}
}

extern "C" jboolean Java_com_tns_JsDebugger_isDebuggerActive(JNIEnv *env, jobject obj)
extern "C" JNIEXPORT jboolean Java_com_tns_JsDebugger_isDebuggerActive(JNIEnv *env, jobject obj)
{
try
{
Expand All @@ -116,7 +116,7 @@ extern "C" jboolean Java_com_tns_JsDebugger_isDebuggerActive(JNIEnv *env, jobjec
}
}

extern "C" void Java_com_tns_JsDebugger_sendCommand(JNIEnv *_env, jobject obj, jbyteArray command, jint length)
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_sendCommand(JNIEnv *_env, jobject obj, jbyteArray command, jint length)
{
try
{
Expand Down
32 changes: 16 additions & 16 deletions runtime/src/main/jni/com_tns_Runtime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
return JNI_VERSION_1_6;
}

extern "C" void Java_com_tns_Runtime_initNativeScript(JNIEnv *_env, jobject obj, jint runtimeId, jstring filesPath, jboolean verboseLoggingEnabled, jstring packageName, jobjectArray args, jstring callingDir, jobject jsDebugger)
extern "C" JNIEXPORT void Java_com_tns_Runtime_initNativeScript(JNIEnv *_env, jobject obj, jint runtimeId, jstring filesPath, jboolean verboseLoggingEnabled, jstring packageName, jobjectArray args, jstring callingDir, jobject jsDebugger)
{
try
{
Expand Down Expand Up @@ -77,7 +77,7 @@ Runtime* TryGetRuntime(int runtimeId)
return runtime;
}

extern "C" void Java_com_tns_Runtime_runModule(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
extern "C" JNIEXPORT void Java_com_tns_Runtime_runModule(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
{
auto runtime = TryGetRuntime(runtimeId);
if (runtime == nullptr)
Expand Down Expand Up @@ -109,7 +109,7 @@ extern "C" void Java_com_tns_Runtime_runModule(JNIEnv *_env, jobject obj, jint r
}
}

extern "C" void Java_com_tns_Runtime_runWorker(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
extern "C" JNIEXPORT void Java_com_tns_Runtime_runWorker(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
{
auto runtime = TryGetRuntime(runtimeId);
if (runtime == nullptr)
Expand Down Expand Up @@ -141,7 +141,7 @@ extern "C" void Java_com_tns_Runtime_runWorker(JNIEnv *_env, jobject obj, jint r
}
}

extern "C" jobject Java_com_tns_Runtime_runScript(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
extern "C" JNIEXPORT jobject Java_com_tns_Runtime_runScript(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
{
jobject result = nullptr;

Expand Down Expand Up @@ -176,7 +176,7 @@ extern "C" jobject Java_com_tns_Runtime_runScript(JNIEnv *_env, jobject obj, jin
return result;
}

extern "C" jobject Java_com_tns_Runtime_callJSMethodNative(JNIEnv *_env, jobject obj, jint runtimeId, jint javaObjectID, jstring methodName, jint retType, jboolean isConstructor, jobjectArray packagedArgs)
extern "C" JNIEXPORT jobject Java_com_tns_Runtime_callJSMethodNative(JNIEnv *_env, jobject obj, jint runtimeId, jint javaObjectID, jstring methodName, jint retType, jboolean isConstructor, jobjectArray packagedArgs)
{
jobject result = nullptr;

Expand Down Expand Up @@ -211,7 +211,7 @@ extern "C" jobject Java_com_tns_Runtime_callJSMethodNative(JNIEnv *_env, jobject
return result;
}

extern "C" void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv *_env, jobject obj, jint runtimeId, jobject javaObject, jint javaObjectID, jstring className)
extern "C" JNIEXPORT void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv *_env, jobject obj, jint runtimeId, jobject javaObject, jint javaObjectID, jstring className)
{
auto runtime = TryGetRuntime(runtimeId);
if (runtime == nullptr)
Expand Down Expand Up @@ -243,7 +243,7 @@ extern "C" void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv *_env, jobjec
}
}

extern "C" jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv *env, jobject obj, jint runtimeId)
extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv *env, jobject obj, jint runtimeId)
{
try
{
Expand All @@ -270,7 +270,7 @@ extern "C" jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv *env, jobject ob
}
}

extern "C" jboolean Java_com_tns_Runtime_notifyGc(JNIEnv *env, jobject obj, jint runtimeId)
extern "C" JNIEXPORT jboolean Java_com_tns_Runtime_notifyGc(JNIEnv *env, jobject obj, jint runtimeId)
{
auto runtime = TryGetRuntime(runtimeId);
if (runtime == nullptr) {
Expand All @@ -281,7 +281,7 @@ extern "C" jboolean Java_com_tns_Runtime_notifyGc(JNIEnv *env, jobject obj, jint
return success;
}

extern "C" void Java_com_tns_Runtime_passUncaughtExceptionToJsNative(JNIEnv *env, jobject obj, jint runtimeId, jthrowable exception, jstring stackTrace)
extern "C" JNIEXPORT void Java_com_tns_Runtime_passUncaughtExceptionToJsNative(JNIEnv *env, jobject obj, jint runtimeId, jthrowable exception, jstring stackTrace)
{
auto runtime = TryGetRuntime(runtimeId);
if (runtime == nullptr)
Expand Down Expand Up @@ -313,7 +313,7 @@ extern "C" void Java_com_tns_Runtime_passUncaughtExceptionToJsNative(JNIEnv *env
}
}

extern "C" void Java_com_tns_Runtime_clearStartupData(JNIEnv *env, jobject obj, jint runtimeId)
extern "C" JNIEXPORT void Java_com_tns_Runtime_clearStartupData(JNIEnv *env, jobject obj, jint runtimeId)
{
auto runtime = TryGetRuntime(runtimeId);
if (runtime == nullptr)
Expand All @@ -324,12 +324,12 @@ extern "C" void Java_com_tns_Runtime_clearStartupData(JNIEnv *env, jobject obj,
runtime->ClearStartupData(env, obj);
}

extern "C" jint Java_com_tns_Runtime_getPointerSize(JNIEnv *env, jobject obj)
extern "C" JNIEXPORT jint Java_com_tns_Runtime_getPointerSize(JNIEnv *env, jobject obj)
{
return sizeof(void *);
}

extern "C" void Java_com_tns_Runtime_WorkerGlobalOnMessageCallback(JNIEnv *env, jobject obj, jint runtimeId, jstring msg)
extern "C" JNIEXPORT void Java_com_tns_Runtime_WorkerGlobalOnMessageCallback(JNIEnv *env, jobject obj, jint runtimeId, jstring msg)
{
// Worker Thread runtime
auto runtime = TryGetRuntime(runtimeId);
Expand All @@ -346,7 +346,7 @@ extern "C" void Java_com_tns_Runtime_WorkerGlobalOnMessageCallback(JNIEnv *env,
CallbackHandlers::WorkerGlobalOnMessageCallback(isolate, msg);
}

extern "C" void Java_com_tns_Runtime_WorkerObjectOnMessageCallback(JNIEnv *env, jobject obj, jint runtimeId, jint workerId, jstring msg)
extern "C" JNIEXPORT void Java_com_tns_Runtime_WorkerObjectOnMessageCallback(JNIEnv *env, jobject obj, jint runtimeId, jint workerId, jstring msg)
{
// Main Thread runtime
auto runtime = TryGetRuntime(runtimeId);
Expand All @@ -363,7 +363,7 @@ extern "C" void Java_com_tns_Runtime_WorkerObjectOnMessageCallback(JNIEnv *env,
CallbackHandlers::WorkerObjectOnMessageCallback(isolate, workerId, msg);
}

extern "C" void Java_com_tns_Runtime_TerminateWorkerCallback(JNIEnv *env, jobject obj, jint runtimeId)
extern "C" JNIEXPORT void Java_com_tns_Runtime_TerminateWorkerCallback(JNIEnv *env, jobject obj, jint runtimeId)
{
// Worker Thread runtime
auto runtime = TryGetRuntime(runtimeId);
Expand All @@ -382,7 +382,7 @@ extern "C" void Java_com_tns_Runtime_TerminateWorkerCallback(JNIEnv *env, jobjec
runtime->DestroyRuntime();
}

extern "C" void Java_com_tns_Runtime_ClearWorkerPersistent(JNIEnv *env, jobject obj, jint runtimeId, jint workerId)
extern "C" JNIEXPORT void Java_com_tns_Runtime_ClearWorkerPersistent(JNIEnv *env, jobject obj, jint runtimeId, jint workerId)
{
// Worker Thread runtime
auto runtime = TryGetRuntime(runtimeId);
Expand All @@ -399,7 +399,7 @@ extern "C" void Java_com_tns_Runtime_ClearWorkerPersistent(JNIEnv *env, jobject
CallbackHandlers::ClearWorkerPersistent(workerId);
}

extern "C" void Java_com_tns_Runtime_CallWorkerObjectOnErrorHandleMain(JNIEnv *env, jobject obj, jint runtimeId, jint workerId, jstring message, jstring filename, jint lineno, jstring threadName)
extern "C" JNIEXPORT void Java_com_tns_Runtime_CallWorkerObjectOnErrorHandleMain(JNIEnv *env, jobject obj, jint runtimeId, jint workerId, jstring message, jstring filename, jint lineno, jstring threadName)
{
// Main Thread runtime
auto runtime = TryGetRuntime(runtimeId);
Expand Down