Merge "Initialise hidden api usage logger pre-fork"
This commit is contained in:
commit
f5e95eff50
@ -27,6 +27,7 @@ import static com.android.internal.os.ZygoteConnectionConstants.CONNECTION_TIMEO
|
||||
import static com.android.internal.os.ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS;
|
||||
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.metrics.LogMaker;
|
||||
import android.net.Credentials;
|
||||
import android.net.LocalSocket;
|
||||
import android.os.Parcel;
|
||||
@ -37,6 +38,9 @@ import android.system.Os;
|
||||
import android.system.StructPollfd;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
|
||||
import dalvik.system.VMRuntime;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
@ -330,9 +334,43 @@ class ZygoteConnection {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleHiddenApiAccessLogSampleRate(int percent) {
|
||||
private class HiddenApiUsageLogger implements VMRuntime.HiddenApiUsageLogger {
|
||||
|
||||
private final MetricsLogger mMetricsLogger = new MetricsLogger();
|
||||
|
||||
public void hiddenApiUsed(String packageName, String signature,
|
||||
int accessMethod, boolean accessDenied) {
|
||||
int accessMethodMetric = HiddenApiUsageLogger.ACCESS_METHOD_NONE;
|
||||
switch(accessMethod) {
|
||||
case HiddenApiUsageLogger.ACCESS_METHOD_NONE:
|
||||
accessMethodMetric = MetricsEvent.ACCESS_METHOD_NONE;
|
||||
break;
|
||||
case HiddenApiUsageLogger.ACCESS_METHOD_REFLECTION:
|
||||
accessMethodMetric = MetricsEvent.ACCESS_METHOD_REFLECTION;
|
||||
break;
|
||||
case HiddenApiUsageLogger.ACCESS_METHOD_JNI:
|
||||
accessMethodMetric = MetricsEvent.ACCESS_METHOD_JNI;
|
||||
break;
|
||||
case HiddenApiUsageLogger.ACCESS_METHOD_LINKING:
|
||||
accessMethodMetric = MetricsEvent.ACCESS_METHOD_LINKING;
|
||||
break;
|
||||
}
|
||||
LogMaker logMaker = new LogMaker(MetricsEvent.ACTION_HIDDEN_API_ACCESSED)
|
||||
.setPackageName(packageName)
|
||||
.addTaggedData(MetricsEvent.FIELD_HIDDEN_API_SIGNATURE, signature)
|
||||
.addTaggedData(MetricsEvent.FIELD_HIDDEN_API_ACCESS_METHOD,
|
||||
accessMethodMetric);
|
||||
if (accessDenied) {
|
||||
logMaker.addTaggedData(MetricsEvent.FIELD_HIDDEN_API_ACCESS_DENIED, 1);
|
||||
}
|
||||
mMetricsLogger.write(logMaker);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleHiddenApiAccessLogSampleRate(int samplingRate) {
|
||||
try {
|
||||
ZygoteInit.setHiddenApiAccessLogSampleRate(percent);
|
||||
ZygoteInit.setHiddenApiAccessLogSampleRate(samplingRate);
|
||||
ZygoteInit.setHiddenApiUsageLogger(new HiddenApiUsageLogger());
|
||||
mSocketOutStream.writeInt(0);
|
||||
} catch (IOException ioe) {
|
||||
throw new IllegalStateException("Error writing to command socket", ioe);
|
||||
|
@ -532,6 +532,14 @@ public class ZygoteInit {
|
||||
VMRuntime.getRuntime().setHiddenApiAccessLogSamplingRate(percent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the implementation to be used for logging hidden API accesses
|
||||
* @param logger the implementation of the VMRuntime.HiddenApiUsageLogger interface
|
||||
*/
|
||||
public static void setHiddenApiUsageLogger(VMRuntime.HiddenApiUsageLogger logger) {
|
||||
VMRuntime.getRuntime().setHiddenApiUsageLogger(logger);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a PathClassLoader for the given class path that is associated with a shared
|
||||
* namespace, i.e., this classloader can access platform-private native libraries. The
|
||||
|
Loading…
x
Reference in New Issue
Block a user