mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
move application specific logic from android-runtime to android-widgets
This commit is contained in:
108
widgets/src/main/java/com/tns/RuntimeHelper.java
Normal file
108
widgets/src/main/java/com/tns/RuntimeHelper.java
Normal file
@@ -0,0 +1,108 @@
|
||||
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";
|
||||
}
|
||||
Reference in New Issue
Block a user