blob: 5b31cf45bfb6df50a90689c4f452252641aed248 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.base;
import org.chromium.build.BuildConfig;
/**
* Exposes native library loading status.
*/
public class NativeLibraryLoadedStatus {
/**
* Interface for querying native method availability.
*/
public interface NativeLibraryLoadedStatusProvider {
boolean areMainDexNativeMethodsReady();
boolean areNativeMethodsReady();
}
private static NativeLibraryLoadedStatusProvider sProvider;
public static void checkLoaded(boolean isMainDex) {
// Necessary to make sure all of these calls are stripped in release builds.
if (!BuildConfig.ENABLE_ASSERTS) return;
if (sProvider == null) return;
boolean nativeMethodsReady = isMainDex ? sProvider.areMainDexNativeMethodsReady()
: sProvider.areNativeMethodsReady();
if (!nativeMethodsReady) {
throw new JniException(String.format(
"Native method called before the native library was ready (isMainDex=%b).",
isMainDex));
}
}
public static void setProvider(NativeLibraryLoadedStatusProvider statusProvider) {
sProvider = statusProvider;
}
public static NativeLibraryLoadedStatusProvider getProviderForTesting() {
return sProvider;
}
}