mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
108 lines
2.9 KiB
Java
108 lines
2.9 KiB
Java
package com.tns;
|
|
|
|
import java.io.File;
|
|
|
|
import android.app.Application;
|
|
import android.content.pm.PackageManager.NameNotFoundException;
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
import android.util.Log;
|
|
|
|
public class RuntimeHelper
|
|
{
|
|
private final Application app;
|
|
|
|
public RuntimeHelper(Application app)
|
|
{
|
|
this.app = app;
|
|
}
|
|
|
|
// hasErrorIntent tells you if there was an event (with an uncaught exception) raised from ErrorReport
|
|
public boolean hasErrorIntent()
|
|
{
|
|
boolean hasErrorIntent = false;
|
|
|
|
try
|
|
{
|
|
//empty file just to check if there was a raised uncaught error by ErrorReport
|
|
File errFile = new File(app.getFilesDir(), ErrorReport.ERROR_FILE_NAME);
|
|
|
|
if (errFile.exists())
|
|
{
|
|
errFile.delete();
|
|
hasErrorIntent = true;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.d(logTag, e.getMessage());
|
|
}
|
|
|
|
return hasErrorIntent;
|
|
}
|
|
|
|
public void initRuntime()
|
|
{
|
|
System.loadLibrary("NativeScript");
|
|
|
|
Logger logger = new LogcatLogger(true, app);
|
|
|
|
boolean showErrorIntent = hasErrorIntent();
|
|
if (!showErrorIntent)
|
|
{
|
|
Thread.UncaughtExceptionHandler exHandler = new NativeScriptUncaughtExceptionHandler(logger, app);
|
|
|
|
Thread.setDefaultUncaughtExceptionHandler(exHandler);
|
|
|
|
Async.Http.setApplicationContext(this.app);
|
|
|
|
ExtractPolicy extractPolicy = new DefaultExtractPolicy(logger);
|
|
boolean skipAssetExtraction = Util.runPlugin(logger, app);
|
|
if (!skipAssetExtraction)
|
|
{
|
|
new AssetExtractor(null, logger).extractAssets(app, extractPolicy);
|
|
}
|
|
|
|
if (NativeScriptSyncService.isSyncEnabled(this.app))
|
|
{
|
|
NativeScriptSyncService syncService = new NativeScriptSyncService(logger, this.app);
|
|
|
|
syncService.sync();
|
|
syncService.startServer();
|
|
|
|
// preserve this instance as strong reference
|
|
// do not preserve in NativeScriptApplication field inorder to make the code more portable
|
|
Platform.getOrCreateJavaObjectID(syncService);
|
|
}
|
|
else
|
|
{
|
|
if (logger.isEnabled())
|
|
{
|
|
logger.write("NativeScript LiveSync is not enabled.");
|
|
}
|
|
}
|
|
String appName = app.getPackageName();
|
|
File rootDir = new File(app.getApplicationInfo().dataDir);
|
|
File appDir = app.getFilesDir();
|
|
|
|
ClassLoader classLoader = app.getClassLoader();
|
|
File dexDir = new File(rootDir, "code_cache/secondary-dexes");
|
|
String dexThumb = null;
|
|
try
|
|
{
|
|
dexThumb = Util.getDexThumb(app);
|
|
}
|
|
catch (NameNotFoundException e)
|
|
{
|
|
if (logger.isEnabled()) logger.write("Error while getting current proxy thumb");
|
|
e.printStackTrace();
|
|
}
|
|
ThreadScheduler workThreadScheduler = new WorkThreadScheduler(new Handler(Looper.getMainLooper()));
|
|
Platform.init(this.app, workThreadScheduler, logger, appName, null, rootDir, appDir, classLoader, dexDir, dexThumb);
|
|
Platform.runScript(new File(appDir, "internal/ts_helpers.js"));
|
|
Platform.run();
|
|
}
|
|
}
|
|
|
|
private final String logTag = "MyApp";
|
|
} |