mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 22:01:30 +00:00
ee3de3a3c3
First we need to set the Gecko thread JNIEnv* in nsAndroidStartup, but after that we can initialize and deinitialize the rest of JNI, including AndroidBridge, in GeckoAppShell. This makes nsAppShell control the AndroidBridge lifetime. Over time, parts of the AndroidBridge functionality will be migrated to nsAppShell.
56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include <android/log.h>
|
|
|
|
#include <jni.h>
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <pthread.h>
|
|
|
|
#include "mozilla/jni/Utils.h"
|
|
#include "nsTArray.h"
|
|
#include "nsString.h"
|
|
#include "nsIFile.h"
|
|
#include "nsAppRunner.h"
|
|
#include "APKOpen.h"
|
|
#include "nsExceptionHandler.h"
|
|
|
|
#define LOG(args...) __android_log_print(ANDROID_LOG_INFO, MOZ_APP_NAME, args)
|
|
|
|
extern "C" NS_EXPORT void
|
|
GeckoStart(JNIEnv* env, char* data, const nsXREAppData* appData)
|
|
{
|
|
mozilla::jni::SetGeckoThreadEnv(env);
|
|
|
|
#ifdef MOZ_CRASHREPORTER
|
|
const struct mapping_info *info = getLibraryMapping();
|
|
while (info->name) {
|
|
CrashReporter::AddLibraryMapping(info->name, info->base,
|
|
info->len, info->offset);
|
|
info++;
|
|
}
|
|
#endif
|
|
|
|
if (!data) {
|
|
LOG("Failed to get arguments for GeckoStart\n");
|
|
return;
|
|
}
|
|
|
|
nsTArray<char *> targs;
|
|
char *arg = strtok(data, " ");
|
|
while (arg) {
|
|
targs.AppendElement(arg);
|
|
arg = strtok(nullptr, " ");
|
|
}
|
|
targs.AppendElement(static_cast<char *>(nullptr));
|
|
|
|
int result = XRE_main(targs.Length() - 1, targs.Elements(), appData, 0);
|
|
|
|
if (result)
|
|
LOG("XRE_main returned %d", result);
|
|
}
|