After fighting with this for nearly a month and reading dozens of threads on xda, stack-overflow, etc... I finally figured out this issue, so I'm putting it here in hopes it saves someone else the frustration.
The issue presented itself on my HTC One (M8) running the ViperOne 6.1.0 ROM.
I'm putting this thread in the general section though since I've seen many people with very similar, if not the same issues on a wide variety of devices.
I believe the root cause of my particular issue may be the way HTC sets their devices to simply allow all debugging without authorization if the phones are s-off.
Mine is still s-on, but I have another M8 that's s-off with the exact same ROM as well as an s-off M9, and both of them go straight into debugging, no questions asked, no prompt.
I'm wondering if maybe the ROM was developed using a developer version of the phone and is just missing the prompt, or something similar, but this is just conjecture.
The basic problem was that, when I tried to connect ADB, it showed the phone as "unauthorized" and no matter what I did, the prompt would not come up on the phone to allow debugging.
Also of note, I was missing the "Revoke USB debugging authorizations" menu item entirely (I could search for it, but it wasn't actually there in the menu)
I tried many different combinations of changing drivers, USB modes, enabling/disabling debugging, different machines, deleting the public and private keys for ADB on the computer, etc... all to no avail.
Finally, after much research and testing, I found this comment on stack-overflow and figured out how to manually authorize keys.
Note: This will require root, a custom recovery, or some way of writing the the system partition (I used TWRP at first, then TerminalEmulator later)
The key was to understand what clicking the dialog to 'always allow' a machine actually does.
When you click to always allow, android appends the public key from ADB on the computer into a specific file on the phone.
Since my phone wouldn't connect in the first place though, I didn't have that file or understand the format, etc...
The file is called adb_keys, it is a file (not folder) which is located at: /data/misc/adb/
The format of this file is one public key per line.
Thus, there are a couple of ways to go about manually authorizing a machine for debugging.
First, manually building the adb_keys file. (This is what I did at first)
Second, copying an existing adb_keys file from another device (Which doesn't need root)
For manually building the adb_keys file, the first step is to find the public key on the computer.
For me (Windows 10) it was located at C:\Users\<my profile>\.android\adbkey.pub
For Linux and OSX, I believe it is at: ~/.android/adbkey.pub
If you only need to authorize one computer:
Simply copy the adbkey.pub onto the device location: /data/misc/adb/ and rename it from adbkey.pub to adb_keys
chmod 0644 and then reboot.
Now, the phone should accept debugging from the computer just as though you clicked the dialog.
If you need to authorize several computers...
As mentioned, the /data/misc/adb/adb_keys file is actually a list of all the keys which have debugging permissions, one key per line.
First, collect the adbkey.pub files from each computer you want to authorize.
Then, using a text editor which supports linux style line breaks (Notepad++ if on windows) simply create your own adb_keys file by appending the contents of each adbkey.pub file, putting a line break between each key
Now save the adb_keys file you just created, and put it on the phone's /data/misc/adb/ folder using whatever method you prefer, and chmod 0644
If you need to revoke debugging permissions, (like the menu option, if the menu option is missing)
Simply delete /data/misc/adb/adb_keys
And finally,
If you have access to another device (does not have to be rooted) and want to replicate its debugging permissions
Plug the 'donor' device into the computer first, then issue:
adb pull /data/misc/adb/adb_keys c:\temp\adb_keys
(Or replace "C:\temp\adb_keys" with whatever file path works for you)
Then, copy the file to the 'target' device in the same location (/data/misc/adb/adb_keys) and chmod 0644
I've tested all of these methods and they worked well.
In the end, I used the last method since my tablet had all the debugging permissions I wanted on my phone.
The issue presented itself on my HTC One (M8) running the ViperOne 6.1.0 ROM.
I'm putting this thread in the general section though since I've seen many people with very similar, if not the same issues on a wide variety of devices.
I believe the root cause of my particular issue may be the way HTC sets their devices to simply allow all debugging without authorization if the phones are s-off.
Mine is still s-on, but I have another M8 that's s-off with the exact same ROM as well as an s-off M9, and both of them go straight into debugging, no questions asked, no prompt.
I'm wondering if maybe the ROM was developed using a developer version of the phone and is just missing the prompt, or something similar, but this is just conjecture.
The basic problem was that, when I tried to connect ADB, it showed the phone as "unauthorized" and no matter what I did, the prompt would not come up on the phone to allow debugging.
Also of note, I was missing the "Revoke USB debugging authorizations" menu item entirely (I could search for it, but it wasn't actually there in the menu)
I tried many different combinations of changing drivers, USB modes, enabling/disabling debugging, different machines, deleting the public and private keys for ADB on the computer, etc... all to no avail.
Finally, after much research and testing, I found this comment on stack-overflow and figured out how to manually authorize keys.
Note: This will require root, a custom recovery, or some way of writing the the system partition (I used TWRP at first, then TerminalEmulator later)
The key was to understand what clicking the dialog to 'always allow' a machine actually does.
When you click to always allow, android appends the public key from ADB on the computer into a specific file on the phone.
Since my phone wouldn't connect in the first place though, I didn't have that file or understand the format, etc...
The file is called adb_keys, it is a file (not folder) which is located at: /data/misc/adb/
The format of this file is one public key per line.
Thus, there are a couple of ways to go about manually authorizing a machine for debugging.
First, manually building the adb_keys file. (This is what I did at first)
Second, copying an existing adb_keys file from another device (Which doesn't need root)
For manually building the adb_keys file, the first step is to find the public key on the computer.
For me (Windows 10) it was located at C:\Users\<my profile>\.android\adbkey.pub
For Linux and OSX, I believe it is at: ~/.android/adbkey.pub
If you only need to authorize one computer:
Simply copy the adbkey.pub onto the device location: /data/misc/adb/ and rename it from adbkey.pub to adb_keys
chmod 0644 and then reboot.
Now, the phone should accept debugging from the computer just as though you clicked the dialog.
If you need to authorize several computers...
As mentioned, the /data/misc/adb/adb_keys file is actually a list of all the keys which have debugging permissions, one key per line.
First, collect the adbkey.pub files from each computer you want to authorize.
Then, using a text editor which supports linux style line breaks (Notepad++ if on windows) simply create your own adb_keys file by appending the contents of each adbkey.pub file, putting a line break between each key
Now save the adb_keys file you just created, and put it on the phone's /data/misc/adb/ folder using whatever method you prefer, and chmod 0644
If you need to revoke debugging permissions, (like the menu option, if the menu option is missing)
Simply delete /data/misc/adb/adb_keys
And finally,
If you have access to another device (does not have to be rooted) and want to replicate its debugging permissions
Plug the 'donor' device into the computer first, then issue:
adb pull /data/misc/adb/adb_keys c:\temp\adb_keys
(Or replace "C:\temp\adb_keys" with whatever file path works for you)
Then, copy the file to the 'target' device in the same location (/data/misc/adb/adb_keys) and chmod 0644
I've tested all of these methods and they worked well.
In the end, I used the last method since my tablet had all the debugging permissions I wanted on my phone.