修改编译Android 11源码时发现报can‘t find symble的错误

在/home/wq/android_11_source_repo/packages/apps/Contacts/src/com/android/contacts/activities/ContactSelectionActivity.java

加入了一句

        getWindow().addSystemFlags(android.view.WindowManager.LayoutParams
            .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);

编译时发现报找不到SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS的错误。 

找打定义SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS的文件:/home/wq/android_11_source_repo/frameworks/base/core/java/android/view/WindowManager.java。发现符的定义如下:

        /**
         * Flag to indicate that any window added by an application process that is of type
         * {@link #TYPE_TOAST} or that requires
         * {@link android.app.AppOpsManager#OP_SYSTEM_ALERT_WINDOW} permission should be hidden when
         * this window is visible.
         * @hide
         */
        @SystemApi
        @RequiresPermission(permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS)
        public static final int SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS = 0x00080000;

发现这个api需要一个权限,在/home/wq/android_11_source_repo/packages/apps/Contacts/src/com/android/contacts/AndroidManifest.xml加入了权限,

    

编译依然报找不到符号的错误。

最后发现要把/home/wq/android_11_source_repo/packages/apps/Contacts/src/com/android/contacts/Android.bp的sdk_version: "current"改为sdk_version: "system_current"

--- a/Android.bp
+++ b/Android.bp
@@ -32,6 +32,6 @@ android_app {
         proguard_flags_files: ["proguard.flags"],
     },
 
-    sdk_version: "current",
+    sdk_version: "system_current",
     min_sdk_version: "21",
 }

查了一下这两个sdk_version的区别:system_current标志启用系统 SDK API/符号,而current根据源树的 android 版本使用当前预构建的公共 SDK。

你可能感兴趣的:(android,android)