1、Android11 把droid vnc apk编译到固件里面,在系统启动时自动启动,vnc已经起来,用vnc viewer远程连接可以连上,但是是黑屏(在本地打开droid vnc获取权限之后vnc viewer可以看到画面但是还是不能控制)。
------希望结果:系统起来之后就可以用vnc viewer连接看到画面并控制系统
2、问题原因:个人觉得是vnc启动的时候vnc没有抓取屏幕的权限和输入的权限所以按照下面方法修改代码:
a、安装时自动获取权限
diff --git a/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index b500e16..864f280 100644
--- a/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -2820,10 +2820,10 @@
|| upgradedActivityRecognitionPermission != null) {
// Before Q we represented some runtime permissions as install permissions,
// in Q we cannot do this anymore. Hence upgrade them all.
- grant = GRANT_UPGRADE;
+ grant = GRANT_INSTALL;
} else {
// For modern apps keep runtime permissions unchanged.
- grant = GRANT_RUNTIME;
+ grant = GRANT_INSTALL;
}
} else if (bp.isSignature()) {
// For all apps signature permissions are install time ones.
@@ -2848,7 +2848,7 @@
// to the platform (note: need to only do this when
// updating the platform).
if (!isNewPlatformPermissionForPackage(perm, pkg)) {
- grant = GRANT_DENIED;
+ grant = GRANT_INSTALL;
}
}
}
b、运行时自动获取权限
class PackageHandler extends Handler {
......
void doHandleMessage(Message msg) {
switch (msg.what) {
......
case POST_INSTALL: {
if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);
PostInstallData data = mRunningInstalls.get(msg.arg1);
final boolean didRestore = (msg.arg2 != 0);
mRunningInstalls.delete(msg.arg1);
if (data != null && data.res.freezer != null) {
data.res.freezer.close();
}
if (data != null && data.mPostInstallRunnable != null) {
data.mPostInstallRunnable.run();
} else if (data != null && data.args != null) {
InstallArgs args = data.args;
PackageInstalledInfo parentRes = data.res;
//注意:主要是这里
final boolean grantPermissions =/* (args.installFlags
& PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0*/true;
final boolean killApp = (args.installFlags
& PackageManager.INSTALL_DONT_KILL_APP) == 0;
final boolean virtualPreload = ((args.installFlags
& PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
......
} else if (DEBUG_INSTALL) {
// No post-install when we run restore from installExistingPackageForUser
Slog.i(TAG, "Nothing to do for post-install token " + msg.arg1);
}
Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "postInstall", msg.arg1);
} break;
}
}
}
c、配置文件修改
<permission android:name="android.permission.READ_PHONE_STATE"
android:permissionGroup="android.permission-group.UNDEFINED"
android:label="@string/permlab_readPhoneState"
android:description="@string/permdesc_readPhoneState"
- android:protectionLevel="dangerous" />
+ android:protectionLevel="normal" />
<permission android:name="android.permission.RECORD_AUDIO
android:permissionGroup="android.permission-group.UNDEFINED"
android:label="@string/permlab_recordAudio"
android:description="@string/permdesc_recordAudio"
- android:protectionLevel="dangerous|instant" />
+ android:protectionLevel="normal" />
<permission android:name="android.permission.CAMERA"
android:permissionGroup="android.permission-group.UNDEFINED"
android:label="@string/permlab_camera"
android:description="@string/permdesc_camera"
- android:protectionLevel="dangerous|instant" />
+ android:protectionLevel="normal" />
3、系统启动之后vnc还是黑屏