Silva was born in Baguim do Monte, a local parish in Gondomar, and started playing football with Porto-based Salgueiros after switching from swimming.
[6] Silva made his competitive debut for the first team on 29 December 2015, playing the full 90 minutes in a 1–3 home loss against Marítimo in the Taça da Liga.
[8] Silva started the 2015–16 campaign as fourth-choice striker behind Aboubakar and Dani Osvaldo, and his plight worsened in January 2016 with the acquisition of Suk Hyun-jun and Moussa Marega.
However, after José Peseiro replaced Julen Lopetegui as manager, he received more opportunities,[9][10] and scored his first league goal in a 4–0 home win over Boavista in the last match.
[11] He also started in the final of the Taça de Portugal on 22 May, helping his team recover from a 0–2 deficit against Braga with a brace, which included a bicycle kick in the last-minute (eventual 4–2 loss on penalties).
[17] Silva made his debut for the Italian club on 27 July, playing 24 minutes in the 1–0 win against Universitatea Craiova in the third qualifying round of the UEFA Europa League.
[19] On 14 September, already in the group stage, he scored a hat-trick to help the visitors defeat Austria Wien 5–1;[20] in the process, he became the first player to achieve the feat for Milan in Europe since Kaká in 2006,[21] and he was included in UEFA's Europa League Team of the Week due to his performance.
[31] He made his Bundesliga debut 12 days later, playing the entire 2–1 defeat at Augsburg and partnering compatriot and former Porto teammate Gonçalo Paciência up front.
[51][52] Previously, at the 2014 UEFA European Under-19 Championship, he became the first player ever to net four times in a single match (6–1 group stage defeat of Hungary), in an eventual runner-up finish for the under-19s.
[53] On 8 September 2015, in his first appearance with the under-21 side, Silva scored a hat-trick in 19 minutes (both halves combined), contributing to a 6–1 win against Albania for the 2017 European Under-21 Championship qualifiers.
[54] Silva was called up for the first time to the senior team by head coach Fernando Santos on 26 August 2016,[55] playing the second half of a 5–0 friendly victory over Gibraltar in Porto on 1 September.
[57] Silva was selected for the 2017 FIFA Confederations Cup,[58] making his tournament debut when he replaced Ricardo Quaresma for the last eight minutes of the 2–2 group stage draw with Mexico.