Skip to content

Commit 19ebca9

Browse files
authored
Merge pull request #588 from NativeScript/optimize-size
Optimize package size
2 parents 002e662 + 7e62c65 commit 19ebca9

7 files changed

Lines changed: 127 additions & 28 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
3+
let args = process.argv;
4+
let dependencies = JSON.parse(args[2]);
5+
let platformsDir = args[3];
6+
7+
const path = require("path"),
8+
fs = require("fs");
9+
10+
if (dependencies) {
11+
let platformDir = path.join(platformsDir, "android");
12+
let buildDir = path.join(platformDir, "build-tools");
13+
let useV8File = path.join(buildDir, 'useV8');
14+
15+
try {
16+
fs.unlinkSync(useV8File);
17+
} catch (e) {
18+
19+
}
20+
21+
let useV8Symbols = false;
22+
23+
for (let dependencyName in dependencies) {
24+
let dependency = dependencies[dependencyName];
25+
26+
let isPlugin = !!dependency.nativescript;
27+
if (isPlugin) {
28+
let consumesV8Symbols = !!dependency.nativescript.useV8symbols;
29+
if (consumesV8Symbols) {
30+
useV8Symbols = true;
31+
break;
32+
}
33+
}
34+
}
35+
36+
if (useV8Symbols) {
37+
fs.writeFileSync(useV8File, "1");
38+
}
39+
}

build-artifacts/project-template-gradle/build.gradle

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,11 +205,27 @@ dependencies {
205205
// compile files("$rootDir/libs/aar") {
206206
// builtBy 'copyAarDependencies'
207207
// }
208-
208+
copyNativeScriptAar()
209+
209210
compile project(':runtime')
210211
}
211212

212213

214+
def copyNativeScriptAar() {
215+
def useV8SymbolsFlag = new File("$projectDir/build-tools/useV8");
216+
def runtimeAarType = "optimized";
217+
if (useV8SymbolsFlag.exists() && !useV8SymbolsFlag.isDirectory()) {
218+
println "Using less-optimized runtime bundle.";
219+
runtimeAarType = "regular";
220+
}
221+
222+
copy {
223+
from "$projectDir/libs/runtime-libs/nativescript-${runtimeAarType}.aar"
224+
into "$projectDir/libs/runtime-libs/"
225+
rename "nativescript-${runtimeAarType}.aar", "nativescript.aar"
226+
}
227+
}
228+
213229
////////////////////////////////////////////////////////////////////////////////////
214230
///////////////////////////// CONFIGURATION PHASE //////////////////////////////////
215231
////////////////////////////////////////////////////////////////////////////////////

build.gradle

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,48 @@ task generateBindingGenerator (type: Exec) {
108108
}
109109
}
110110

111-
task generateRuntime (type: Exec) {
111+
task generateRuntime {
112+
doFirst {
113+
tasks.generateOptimizedRuntimeAar.execute();
114+
tasks.generateRuntimeAar.execute();
115+
}
116+
}
117+
118+
task generateOptimizedRuntimeAar(type: Exec) {
119+
doFirst {
120+
workingDir "$rootDir/runtime"
121+
if(isWinOs) {
122+
commandLine "cmd", "/c", "gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true", "-Poptimized"
123+
}
124+
else {
125+
commandLine "./gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true", "-Poptimized"
126+
}
127+
}
128+
}
129+
130+
task generateRuntimeAar(type: Exec) {
112131
doFirst {
113132
workingDir "$rootDir/runtime"
114133
if(isWinOs) {
115134
commandLine "cmd", "/c", "gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true"
116135
}
117136
else {
118137
commandLine "./gradlew", "assembleRelease", "-PpackageVersion=${pVersion}", "-PgitCommitVersion=${arVersion}", "-PembedBindingGenerator=true"
119-
}
138+
}
120139
}
121140
}
122141

123142
task copyGeneratedRuntime << {
124143
copy {
125-
from "$rootDir/runtime/build/outputs/aar/runtime-release.aar"
144+
from "$rootDir/runtime/build/outputs/aar/runtime-regular-release.aar"
145+
into "$rootDir/dist/framework/libs/runtime-libs/"
146+
rename "runtime-regular-release.aar", "nativescript-regular.aar"
147+
}
148+
149+
copy {
150+
from "$rootDir/runtime/build/outputs/aar/runtime-optimized-release.aar"
126151
into "$rootDir/dist/framework/libs/runtime-libs/"
127-
rename "runtime-release.aar", "nativescript.aar"
152+
rename "runtime-optimized-release.aar", "nativescript-optimized.aar"
128153
}
129154
}
130155

runtime/build.gradle

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ allprojects {
2020
}
2121

2222
def ndkDebuggable = false;
23+
def optimized = project.hasProperty("optimized")
2324

25+
if(optimized) {
26+
println "Optimized build triggered."
27+
}
2428

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

198202
defaultConfig.with {
203+
if(optimized) {
204+
project.archivesBaseName = "${archivesBaseName}-optimized"
205+
} else {
206+
project.archivesBaseName = "${archivesBaseName}-regular"
207+
}
208+
199209
minSdkVersion.apiLevel = 17
200210
targetSdkVersion.apiLevel = 22
201211
}
@@ -219,6 +229,10 @@ model {
219229

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

232+
if(optimized) {
233+
ldFlags.addAll(["-Wl,--exclude-libs=ALL", "-Wl,--gc-sections"])
234+
}
235+
222236
stl = "c++_static"
223237

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

256270
ndk {
257271
debuggable = ndkDebuggable
272+
273+
if (optimized) {
274+
cppFlags.addAll(["-O3", "-fvisibility=hidden", "-ffunction-sections", "-fno-data-sections", "-Wl,--exclude-libs=ALL", "-Wl,--gc-sections"])
275+
CFlags.addAll(["-O3", "-fvisibility=hidden", "-ffunction-sections", "-fno-data-sections", "-Wl,--exclude-libs=ALL", "--Wl,-gc-sections"])
276+
}
258277
}
259278

260279
setRuntimeCommit.dependsOn(setPackageVersion)

runtime/src/main/jni/com_tns_AssetExtractor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
using namespace tns;
88
using namespace std;
99

10-
extern "C" void Java_com_tns_AssetExtractor_extractAssets(JNIEnv *env, jobject obj, jstring apk, jstring inputDir, jstring outputDir, jboolean _forceOverwrite)
10+
extern "C" JNIEXPORT void Java_com_tns_AssetExtractor_extractAssets(JNIEnv *env, jobject obj, jstring apk, jstring inputDir, jstring outputDir, jboolean _forceOverwrite)
1111
{
1212
try
1313
{

runtime/src/main/jni/com_tns_JsDebugger.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using namespace tns;
77
using namespace std;
88

9-
extern "C" void Java_com_tns_JsDebugger_processDebugMessages(JNIEnv *env, jobject obj)
9+
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_processDebugMessages(JNIEnv *env, jobject obj)
1010
{
1111
try
1212
{
@@ -28,7 +28,7 @@ extern "C" void Java_com_tns_JsDebugger_processDebugMessages(JNIEnv *env, jobjec
2828
}
2929
}
3030

31-
extern "C" void Java_com_tns_JsDebugger_enable(JNIEnv *env, jobject obj)
31+
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_enable(JNIEnv *env, jobject obj)
3232
{
3333
try
3434
{
@@ -50,7 +50,7 @@ extern "C" void Java_com_tns_JsDebugger_enable(JNIEnv *env, jobject obj)
5050
}
5151
}
5252

53-
extern "C" void Java_com_tns_JsDebugger_disable(JNIEnv *env, jobject obj)
53+
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_disable(JNIEnv *env, jobject obj)
5454
{
5555
try
5656
{
@@ -72,7 +72,7 @@ extern "C" void Java_com_tns_JsDebugger_disable(JNIEnv *env, jobject obj)
7272
}
7373
}
7474

75-
extern "C" void Java_com_tns_JsDebugger_debugBreak(JNIEnv *env, jobject obj)
75+
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_debugBreak(JNIEnv *env, jobject obj)
7676
{
7777
try
7878
{
@@ -94,7 +94,7 @@ extern "C" void Java_com_tns_JsDebugger_debugBreak(JNIEnv *env, jobject obj)
9494
}
9595
}
9696

97-
extern "C" jboolean Java_com_tns_JsDebugger_isDebuggerActive(JNIEnv *env, jobject obj)
97+
extern "C" JNIEXPORT jboolean Java_com_tns_JsDebugger_isDebuggerActive(JNIEnv *env, jobject obj)
9898
{
9999
try
100100
{
@@ -116,7 +116,7 @@ extern "C" jboolean Java_com_tns_JsDebugger_isDebuggerActive(JNIEnv *env, jobjec
116116
}
117117
}
118118

119-
extern "C" void Java_com_tns_JsDebugger_sendCommand(JNIEnv *_env, jobject obj, jbyteArray command, jint length)
119+
extern "C" JNIEXPORT void Java_com_tns_JsDebugger_sendCommand(JNIEnv *_env, jobject obj, jbyteArray command, jint length)
120120
{
121121
try
122122
{

runtime/src/main/jni/com_tns_Runtime.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
3131
return JNI_VERSION_1_6;
3232
}
3333

34-
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)
34+
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)
3535
{
3636
try
3737
{
@@ -77,7 +77,7 @@ Runtime* TryGetRuntime(int runtimeId)
7777
return runtime;
7878
}
7979

80-
extern "C" void Java_com_tns_Runtime_runModule(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
80+
extern "C" JNIEXPORT void Java_com_tns_Runtime_runModule(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
8181
{
8282
auto runtime = TryGetRuntime(runtimeId);
8383
if (runtime == nullptr)
@@ -109,7 +109,7 @@ extern "C" void Java_com_tns_Runtime_runModule(JNIEnv *_env, jobject obj, jint r
109109
}
110110
}
111111

112-
extern "C" void Java_com_tns_Runtime_runWorker(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
112+
extern "C" JNIEXPORT void Java_com_tns_Runtime_runWorker(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
113113
{
114114
auto runtime = TryGetRuntime(runtimeId);
115115
if (runtime == nullptr)
@@ -141,7 +141,7 @@ extern "C" void Java_com_tns_Runtime_runWorker(JNIEnv *_env, jobject obj, jint r
141141
}
142142
}
143143

144-
extern "C" jobject Java_com_tns_Runtime_runScript(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
144+
extern "C" JNIEXPORT jobject Java_com_tns_Runtime_runScript(JNIEnv *_env, jobject obj, jint runtimeId, jstring scriptFile)
145145
{
146146
jobject result = nullptr;
147147

@@ -176,7 +176,7 @@ extern "C" jobject Java_com_tns_Runtime_runScript(JNIEnv *_env, jobject obj, jin
176176
return result;
177177
}
178178

179-
extern "C" jobject Java_com_tns_Runtime_callJSMethodNative(JNIEnv *_env, jobject obj, jint runtimeId, jint javaObjectID, jstring methodName, jint retType, jboolean isConstructor, jobjectArray packagedArgs)
179+
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)
180180
{
181181
jobject result = nullptr;
182182

@@ -211,7 +211,7 @@ extern "C" jobject Java_com_tns_Runtime_callJSMethodNative(JNIEnv *_env, jobject
211211
return result;
212212
}
213213

214-
extern "C" void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv *_env, jobject obj, jint runtimeId, jobject javaObject, jint javaObjectID, jstring className)
214+
extern "C" JNIEXPORT void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv *_env, jobject obj, jint runtimeId, jobject javaObject, jint javaObjectID, jstring className)
215215
{
216216
auto runtime = TryGetRuntime(runtimeId);
217217
if (runtime == nullptr)
@@ -243,7 +243,7 @@ extern "C" void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv *_env, jobjec
243243
}
244244
}
245245

246-
extern "C" jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv *env, jobject obj, jint runtimeId)
246+
extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv *env, jobject obj, jint runtimeId)
247247
{
248248
try
249249
{
@@ -270,7 +270,7 @@ extern "C" jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv *env, jobject ob
270270
}
271271
}
272272

273-
extern "C" jboolean Java_com_tns_Runtime_notifyGc(JNIEnv *env, jobject obj, jint runtimeId)
273+
extern "C" JNIEXPORT jboolean Java_com_tns_Runtime_notifyGc(JNIEnv *env, jobject obj, jint runtimeId)
274274
{
275275
auto runtime = TryGetRuntime(runtimeId);
276276
if (runtime == nullptr) {
@@ -281,7 +281,7 @@ extern "C" jboolean Java_com_tns_Runtime_notifyGc(JNIEnv *env, jobject obj, jint
281281
return success;
282282
}
283283

284-
extern "C" void Java_com_tns_Runtime_passUncaughtExceptionToJsNative(JNIEnv *env, jobject obj, jint runtimeId, jthrowable exception, jstring stackTrace)
284+
extern "C" JNIEXPORT void Java_com_tns_Runtime_passUncaughtExceptionToJsNative(JNIEnv *env, jobject obj, jint runtimeId, jthrowable exception, jstring stackTrace)
285285
{
286286
auto runtime = TryGetRuntime(runtimeId);
287287
if (runtime == nullptr)
@@ -313,7 +313,7 @@ extern "C" void Java_com_tns_Runtime_passUncaughtExceptionToJsNative(JNIEnv *env
313313
}
314314
}
315315

316-
extern "C" void Java_com_tns_Runtime_clearStartupData(JNIEnv *env, jobject obj, jint runtimeId)
316+
extern "C" JNIEXPORT void Java_com_tns_Runtime_clearStartupData(JNIEnv *env, jobject obj, jint runtimeId)
317317
{
318318
auto runtime = TryGetRuntime(runtimeId);
319319
if (runtime == nullptr)
@@ -324,12 +324,12 @@ extern "C" void Java_com_tns_Runtime_clearStartupData(JNIEnv *env, jobject obj,
324324
runtime->ClearStartupData(env, obj);
325325
}
326326

327-
extern "C" jint Java_com_tns_Runtime_getPointerSize(JNIEnv *env, jobject obj)
327+
extern "C" JNIEXPORT jint Java_com_tns_Runtime_getPointerSize(JNIEnv *env, jobject obj)
328328
{
329329
return sizeof(void *);
330330
}
331331

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

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

366-
extern "C" void Java_com_tns_Runtime_TerminateWorkerCallback(JNIEnv *env, jobject obj, jint runtimeId)
366+
extern "C" JNIEXPORT void Java_com_tns_Runtime_TerminateWorkerCallback(JNIEnv *env, jobject obj, jint runtimeId)
367367
{
368368
// Worker Thread runtime
369369
auto runtime = TryGetRuntime(runtimeId);
@@ -382,7 +382,7 @@ extern "C" void Java_com_tns_Runtime_TerminateWorkerCallback(JNIEnv *env, jobjec
382382
runtime->DestroyRuntime();
383383
}
384384

385-
extern "C" void Java_com_tns_Runtime_ClearWorkerPersistent(JNIEnv *env, jobject obj, jint runtimeId, jint workerId)
385+
extern "C" JNIEXPORT void Java_com_tns_Runtime_ClearWorkerPersistent(JNIEnv *env, jobject obj, jint runtimeId, jint workerId)
386386
{
387387
// Worker Thread runtime
388388
auto runtime = TryGetRuntime(runtimeId);
@@ -399,7 +399,7 @@ extern "C" void Java_com_tns_Runtime_ClearWorkerPersistent(JNIEnv *env, jobject
399399
CallbackHandlers::ClearWorkerPersistent(workerId);
400400
}
401401

402-
extern "C" void Java_com_tns_Runtime_CallWorkerObjectOnErrorHandleMain(JNIEnv *env, jobject obj, jint runtimeId, jint workerId, jstring message, jstring filename, jint lineno, jstring threadName)
402+
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)
403403
{
404404
// Main Thread runtime
405405
auto runtime = TryGetRuntime(runtimeId);

0 commit comments

Comments
 (0)