From: Dongwon Kang Date: Sat, 10 Mar 2018 01:24:08 +0000 (-0800) Subject: Use system property to get the package name for media update X-Git-Tag: android-x86-9.0-r1~140^2~70^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4a649366d57405417b78d438b4daf201eeb12387;p=android-x86%2Fframeworks-base.git Use system property to get the package name for media update Also, disabled updatable apk usage on Media2 APIs since they are hidden and they shouldn't be used in P. Test: build and boot on aosp and non-aosp build Bug: 67908547 Change-Id: Ic93cc0f07604020ec47be25725b05af8a9794572 --- diff --git a/media/java/android/media/update/ApiLoader.java b/media/java/android/media/update/ApiLoader.java index 6f82f68304c9..a7eb30d0f596 100644 --- a/media/java/android/media/update/ApiLoader.java +++ b/media/java/android/media/update/ApiLoader.java @@ -16,68 +16,14 @@ package android.media.update; -import android.app.ActivityManager; -import android.app.AppGlobals; -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.os.Build; -import android.os.RemoteException; -import android.os.UserHandle; - -import com.android.internal.annotations.GuardedBy; - -import dalvik.system.PathClassLoader; - -import java.io.File; - /** * @hide */ public final class ApiLoader { - @GuardedBy("this") - private static StaticProvider sMediaUpdatable; - - private static final String UPDATE_PACKAGE = "com.android.media.update"; - private static final String UPDATE_CLASS = "com.android.media.update.ApiFactory"; - private static final String UPDATE_METHOD = "initialize"; - private static final boolean REGISTER_UPDATE_DEPENDENCY = true; - private ApiLoader() { } public static StaticProvider getProvider() { - if (sMediaUpdatable != null) return sMediaUpdatable; - - try { - return getMediaUpdatable(); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } catch (NameNotFoundException | ReflectiveOperationException e) { - throw new RuntimeException(e); - } - } - - // TODO This method may do I/O; Ensure it does not violate (emit warnings in) strict mode. - private static synchronized StaticProvider getMediaUpdatable() - throws NameNotFoundException, ReflectiveOperationException, RemoteException { - if (sMediaUpdatable != null) return sMediaUpdatable; - - // TODO Figure out when to use which package (query media update service) - int flags = Build.IS_DEBUGGABLE ? 0 : PackageManager.MATCH_FACTORY_ONLY; - flags |= PackageManager.GET_SHARED_LIBRARY_FILES; - ApplicationInfo ai = AppGlobals.getPackageManager().getApplicationInfo( - UPDATE_PACKAGE, flags, UserHandle.myUserId()); - - if (REGISTER_UPDATE_DEPENDENCY) { - // Register a dependency to the updatable in order to be killed during updates - ActivityManager.getService().addPackageDependency(ai.packageName); - } - - ClassLoader classLoader = new PathClassLoader(ai.sourceDir, - ai.nativeLibraryDir + File.pathSeparator + System.getProperty("java.library.path"), - ClassLoader.getSystemClassLoader().getParent()); - return sMediaUpdatable = (StaticProvider) classLoader.loadClass(UPDATE_CLASS) - .getMethod(UPDATE_METHOD, ApplicationInfo.class).invoke(null, ai); + throw new RuntimeException("Use MediaSession/Browser instead of" + + " hidden MediaSession2/Browser2 APIs."); } } diff --git a/services/core/java/com/android/server/media/MediaUpdateService.java b/services/core/java/com/android/server/media/MediaUpdateService.java index f38b35342f3a..af06d157a526 100644 --- a/services/core/java/com/android/server/media/MediaUpdateService.java +++ b/services/core/java/com/android/server/media/MediaUpdateService.java @@ -23,11 +23,14 @@ import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.media.IMediaExtractorUpdateService; +import android.os.Build; import android.os.IBinder; import android.os.Handler; import android.os.PatternMatcher; import android.os.ServiceManager; +import android.os.SystemProperties; import android.os.UserHandle; +import android.text.TextUtils; import android.util.Log; import android.util.Slog; import com.android.server.SystemService; @@ -36,7 +39,8 @@ import com.android.server.SystemService; public class MediaUpdateService extends SystemService { private static final String TAG = "MediaUpdateService"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - private static final String MEDIA_UPDATE_PACKAGE_NAME = "com.android.media.update"; + private static final String MEDIA_UPDATE_PACKAGE_NAME = + SystemProperties.get("ro.mediacomponents.package"); private static final String EXTRACTOR_UPDATE_SERVICE_NAME = "media.extractor.update"; private IMediaExtractorUpdateService mMediaExtractorUpdateService; @@ -49,7 +53,8 @@ public class MediaUpdateService extends SystemService { @Override public void onStart() { - if ("userdebug".equals(android.os.Build.TYPE) || "eng".equals(android.os.Build.TYPE)) { + if (("userdebug".equals(android.os.Build.TYPE) || "eng".equals(android.os.Build.TYPE)) + && !TextUtils.isEmpty(MEDIA_UPDATE_PACKAGE_NAME)) { connect(); registerBroadcastReceiver(); } @@ -133,6 +138,12 @@ public class MediaUpdateService extends SystemService { } catch (Exception e) { Slog.v(TAG, "package '" + MEDIA_UPDATE_PACKAGE_NAME + "' not installed"); } + if (packageInfo != null && Build.VERSION.SDK_INT != packageInfo.targetSdkVersion) { + Slog.w(TAG, "This update package is not for this platform version. Ignoring. " + + "platform:" + Build.VERSION.SDK_INT + + " targetSdk:" + packageInfo.targetSdkVersion); + pluginsAvailable = false; + } loadExtractorPlugins( (packageInfo != null && pluginsAvailable) ? packageInfo.sourceDir : ""); }