如何通过ADB解锁androidphone

How to unlock android phone through ADB

我的屏幕死机了,我想解锁我的 phone 这样我就可以通过 Kies 访问它来备份我的照片。

我通过 Android 设备管理器锁定了 phone 并设置了一个简单的密码(我希望在锁定后有解锁选项)并尝试了多种解锁方法,例如:

adb shell input text 1234

因为我不知道锁定屏幕是什么样子,所以我不确定解锁它的正确输入。

我知道 phone 已打开并且它响应 adb。我还可以通过 Eclipse 在其上 运行 应用程序。 这是三星 Galaxy S5 Android 5.0.

此命令可帮助您使用 ADB

解锁 phone
adb shell input keyevent 82 # unlock

如果您在输入密码后必须单击确定,此命令将解锁您的 phone:

adb shell input text XXXX && adb shell input keyevent 66

在哪里

  • XXXX 是您的密码。
  • 66 是按钮的键码 OK.
  • adb shell input text XXXX 将输入您的密码。
  • adb shell input keyevent 66 将模拟点击 OK 按钮

另一种方式仅供参考。

使用USB OTG数据线,连接USB鼠标,点击鼠标即可触摸屏幕!

如果您安装并连接了 MyPhoneExplorer(不确定这是必须的,碰巧已经是我的设置),您可以使用它来通过计算机鼠标控制屏幕。它通过 ADB 连接,您的普通 USB 数据线就足够了。

我发现即使不重启也能工作的另一个解决方案是更新 settings.db 中的表并锁定 settings.db 不过,我不得不切换到 root 才能打开 settings.db:

 adb shell
 su
 sqlite3 /data/data/com.android.providers.settings/databases/settings.db
 update secure set value=1 where name='lockscreen.disabled';
 .quit
 sqlite3 /data/system/locksettings.db
 update locksettings set value=0 where name='lock_pattern_autlock';
 update locksettings set value=1 where name='lockscreen.disabled';
 .quit

Source that made me edit my tables

如果您在 phone 上启用了 USB-Debugging/ADB 并且您的 PC 有权在 phone 上进行调试,那么您可以尝试使用以下工具之一:

scrcpy

scrcpy 通过 adb 连接到您的设备并执行一个临时应用程序以将屏幕内容流式传输到您的 PC,您可以远程控制您的设备。它适用于 GNU/Linux、Windows 和 macOS。

Vysor

Vysor 是一个 chrome 网络应用程序,它通过 adb 连接到您的设备并安装配套应用程序以将您的屏幕内容流式传输到 PC。然后,您可以使用鼠标远程控制您的设备。

MonkeyRemote

MonkeyRemote是发现Vysor之前自己写的一个远程控制工具。它还通过 adb 连接并允许您通过鼠标控制您的设备,但与 Vysor 相比,流式屏幕内容更新非常慢(每秒约 1 帧)。好处是不需要安装配套应用程序。

如果设备被黑屏锁定运行以下情况:

  1. adb shell 输入 keyevent 26 - 这将打开屏幕
  2. adb shell 输入 keyevent 82 - 这将解锁并要求输入 pin
  3. adb shell input text xxxx && adb shell input keyevent 66 - 这将输入您的密码并按回车键,将设备解锁到主屏幕

在 Nexus 5 中测试:

adb shell input keyevent 26 #Pressing the lock button
adb shell input touchscreen swipe 930 880 930 380 #Swipe UP
adb shell input text XXXX #Entering your passcode
adb shell input keyevent 66 #Pressing Enter

对我有用。

以下命令在屏幕打开和关闭时都有效

要锁定屏幕:

adb shell input keyevent 82 && adb shell input keyevent 26 && adb shell input keyevent 26

锁定屏幕并关闭

adb shell input keyevent 82 && adb shell input keyevent 26

免密码解锁屏幕

adb shell input keyevent 82 && adb shell input keyevent 66

要解锁已通过1234的屏幕

adb shell input keyevent 82 && adb shell input text 1234 && adb shell input keyevent 66

我想分享我的方法,首先我有华为提升p7并且我的触摸屏停止处理触摸,所以none以上解决方案帮助我解锁了phone ,我找到了一个更聪明的方法来做到这一点,因为我可以看到屏幕因此我认为我的显示器是 1080 x 1920 像素因此我不得不用带有(x,y)的键盘在我的 photoshop 上模拟绘图所以我可以尝试使用 input mouse tap 命令。

因为我有 pin lock,正如你在图片中看到的那样,我得到了屏幕上所有数字的所有 (x,y) 来模拟触摸和解锁我的屏幕并且必须备份我的数据,因此如果我的密码是 123 我做了以下所有命令

adb shell input mouse tap 100 1150
adb shell input mouse tap 500 1150
adb shell input mouse tap 900 1150

然后我的 phone 刚刚解锁,希望对您有所帮助。

我发现了一个特殊情况,滑动(ADB shell 输入触摸屏滑动 ...)解锁主屏幕不起作用。更准确地说是 Acer Z160 和 Acer S57。这些手机已经成为历史,但我们的开发人员仍然需要考虑它们。 Here 是解决我问题的代码源。我已经让我的应用程序从设备开始。在 "onCreate" 函数中,我临时更改了锁类型。

另外,为了以防万一 google 驱动器对 zip 文件做了什么,我将 post 下面的代码片段。

安卓清单:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.gresanuemanuelvasi.test_wakeup">
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
        <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <receiver android:name=".ServiceStarter" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
                android:directBootAware="true" tools:targetApi="n">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </receiver>
        </application>
    </manifest>

    class ServiceStarter: BroadcastReceiver() {
        @SuppressLint("CommitPrefEdits")
        override fun onReceive(context: Context?, intent: Intent?) {
            Log.d("EMY_","Calling onReceive")
             context?.let {
                 Log.i("EMY_", "Received action: ${intent!!.getAction()}, user unlocked: " + UserManagerCompat.isUserUnlocked(context))

                 val sp =it.getSharedPreferences("EMY_", Context.MODE_PRIVATE)
                 sp.edit().putString(MainActivity.MY_KEY, "M-am activat asa cum trebuie!")

                 if (intent!!.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
                     val i = Intent(it, MainActivity::class.java)
                     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                     it.startActivity(i)
                 }
            }
        }
    }

class MainActivity : AppCompatActivity() {

    companion object {
        const val MY_KEY="MY_KEY"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val kgm = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
        val kgl = kgm.newKeyguardLock(MainActivity::class.java.simpleName)
        if (kgm.inKeyguardRestrictedInputMode()) {
            kgl.disableKeyguard()
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(arrayOf(Manifest.permission.RECEIVE_BOOT_COMPLETED), 1234)
        }
        else
        {
            afisareRezultat()
        }
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {

        if(1234 == requestCode )
        {
            afisareRezultat()
        }

        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    private fun afisareRezultat() {
        Log.d("EMY_","Calling afisareRezultat")
        val sp = getSharedPreferences("EMY_", Context.MODE_PRIVATE);
        val raspuns = sp.getString(MY_KEY, "Doesn't exists")
        Log.d("EMY_", "AM primit: ${raspuns}")
        sp.edit().remove(MY_KEY).apply()
    }
}

@Yogeesh Seralathan 稍微修改了答案。他的回答非常有效,一次只需 运行 这些命令。

adb shell input keyevent 26 && adb shell input keyevent 82 && adb shell input text XXXX && adb shell input keyevent 66

// 或
adb shell input keyevent 26 && adb shell input touchscreen swipe 930 880 930 380 && adb shell input text XXXX && adb shell input keyevent 66

其中:
input Keyevent 26 表示按下电源按钮。
input touchscreen swipe 930 880 930 380 表示向上滑动。
input text XXXX表示您输入的密码。
input keyevent 66 表示按下回车键。

如果你想打开你的 phone 而不是触摸它,这就是方法

步骤

  1. 确保您已在 pc 和 android
  2. 中完成 adb 设置
  3. 打开 cmd(命令提示符)
  4. 输入 adb devices 看看你的 phone 是否准备好了
  5. 如果显示类似
List of devices attached
059c97f4        device

然后输入以下命令

adb shell input keyevent 26 && adb shell input swipe 600 600 0 0 && adb shell input text <pass> && adb shell input keyevent 66

将您的密码输入 <pass> 并完成。你phone有希望打开

基于@Bhaskar 的回答和其他人的回答,这里有一个完整的解锁命令(在 Pixel 3 上测试过):

adb shell input keyevent 26 && adb shell input keyevent 82 && adb shell input text <password> && adb shell input keyevent 66

滑动解锁(适用于 Pixel 3a):

adb shell input keyevent 26 && adb shell input touchscreen swipe 2 4400 500 2