轉載至:https://blog.csdn.net/caibaihui/article/details/46862591
error: device unauthorized. Please check the confirmation dialog on your device.
用adb調試android設備時,首次連接時,會出現一個授權提示:
error: device unauthorized. Please check the confirmation dialog on your device.
這時候,正常情況下,在手機上會出現一個提示框,讓用戶確認是否授權這個PC設備允許調試,你只需要點擊確認就可以了!
工作原理是什么?
原來在我們的PC機(以windows為例)上啟動了adb.exe進程時,adb會在本地生成一對密鑰adbkey(私鑰)與adbkey.pub(公鑰);
根據彈框提示“The computer's RSA key fingerprint is:xxxx”,可以看出是一對RSA算法的密鑰,其中公鑰是用來發送給手機的;
當你執行“adb shell”時,adb.exe會將當前PC的公鑰(或者公鑰的hash值)(fingerprint)發送給android設備;這時,如果android上已經保存了這台PC的公鑰,則匹配出對應的公鑰進行認證,建立adb連接;如果android上沒有保存這台PC的公鑰,則會彈出提示框,讓你確認是否允許這台機器進行adb連接,當你點擊了允許授權之后,android就會保存了這台PC的adbkey.pub(公鑰);
當然手機廠商也有可能會內置一些adbkey.pub(公鑰);
那么問題來了,這些密鑰在PC與Android上分別存儲在哪里?
首先PC上,以Windows7為例,當你首次啟動adb.exe時,會在C盤的當前用戶的目錄下生成一個".android"目錄,其中adbkey與adbkey.pub就在這個目錄下;(adb.exe會在啟動時讀取這兩個文件(沒有就重新生成),所以如果你要是刪除或者修改了這兩個文件之后,必須要關閉adb.exe進程,重啟之后才能生效;)
其次Android上,PC的公鑰被保存在一個文件中"/data/misc/adb/adb_keys";
在知道了adb這種認證的原理之后,你可以在不希望自己android設備授權任何PC設備進行adb鏈接時,清除"/data/misc/adb/adb_keys"文件;
也可以在沒有屏幕的情況下,讓已經認證過的PC將你PC上的adbkey.pub中的公鑰導入到android中的"/data/misc/adb/adb_keys"文件中,或者將已經認證過的PC機上的adbkey與adbkey.pub拷貝到本機上覆蓋你自己的adbkey與adbkey.pub,然后重啟adb.exe,即可執行adb命令;