Hardware basicamente é o cabo usb, seu pc e o celular android. Pra depurar basta entrar no menu de configurações do Android e ativar o modo desenvolvedor, está oculto:
https://tecnoblog.net/277750/como-ativa ... o-android/Dá até para eliminar o cabo USB e usar via conexão sem fio, mas é um pouco mais trabalhoso configurar, e nem sei se todo celular permite de forma fácil, mas será simples você usar um simulador de Android, como o próprio que vem com o Android SDK (lento) ou configurar uma VM como o Genymotion para depurar com o Android Studio, por exemplo. É bem provável que você vá criar uma penca de VMs com Android, cada qual com configurações diferentes, principalmente de tela, pra ver como sua aplicação vai se comportar em hardwares diferentes.
Em relação à linguagem para app Android, depende muito do tipo de aplicação que você queira desenvolver, pois se for jogos, sugiro usar engines gráficas, uma das mais simples de usar é a Unit3d (lingagem C#, lua, javascript... você escolhe dentre as opções que ele permite)
Se for programar aplicações nativas com relativa complexidade, o básico do Android é o próprio Android Studio com JAVA, mas pode utilizar também o Xamarin da Microsoft, o que te permite gerar aplicativo para iPhone, Android e Windows Universal (ios precisa do mac com o xcode pra compilar e etc). Tanto java quanto c# permite você chamar rotinas escritas em c/c++ também via JNI ou interop, mas não vejo muita vantagem nisso, só se for algo que exige muita performance em cálculo com muitos dados (provavelmente matrizes), como quando você for usar o OpenCV. Dá até pra programar jogos com java e C#, mas seria melhor usar um framework para jogos, como Ogre Android, ou outro para não sofrer tanto. Uma outra opção interessante talvez seja o Flutter da Google, que promete velocidade de desenvolvimento.
Pra fazer aplicações genéricas, além do Java e C#, pode usar as plataformas baseadas em Javascript também, como o IONIC, Phongap/Cordova, coisas como React Native e etc, mas eu não sou muito fã de javascript, então não gosto muito desses "frameworks", além do que volta e meia dá uma dor de barriga em um programador JS e ele vai lá e cria mais uma plataforminha em Javascript para mobile.
O bom do js é que é muito mais fácil pra gente fazer engenharia reversa do que com java ou c# quando for necessário, o ruim é que essas plataformas tendem a ser igual roupa para mulher, vai mudar a cada estação e, se você não ficar atualizando, vai ficar "fora de moda". Não estou afirmando que isso não acontece com Java e C# (xamarin), mas os dois existem desde muito tempo, evoluíram, não foi criado alternativas a eles, as chances deles serem descontinuados é bem menor que a de muitas plataforminhas em JS por aí.
Sugiro usar uma IDE boa, como o próprio Android Studio (nativo JAVA, IntelliJ IDEA, Eclipse), Visual Studio (Xamarin) ou até o Visual Studio Code, mas esse último não é muito "out of the box", mesmo assim é bem fácil.