He earned 70 caps for Portugal across all youth levels combined. He made his debut for the senior side in 2012, and later that year was part of the Portugal squad that reached the semi-finals of UEFA Euro 2012.

The same happened to Oliveira in 2009–10. However, in January 2010, he made his professional – and first division – debuts, being loaned until June to Rio Ave; his first game came on 7 February, as he played the last 10 minutes of the 2–0 home win against Leixões.

Oliveira's loan was initially extended for the entirety of the 2010–11 season but, on 12 August 2010, he moved to Paços de Ferreira, in the same predicament.[3] He scored on his debut on 12 September, a 1–1 draw at Marítimo and, the following month, helped Paços come from behind at Naval (2–1) by netting the winning goal from a direct free kick.

On 14 October 2011, Oliveira made his official debut for Benfica, playing 45 minutes in a 2–0 away win against Portimonense for the season's Portuguese Cup.[4] On 18 January of the following year, he played the entire game against Santa Clara for the League Cupgroup stage, and scored in a 2–0 home win;[5] the following month, for the same competition – the Portuguese Football Federation ruled that, for the tournament, at least two national players would have to appear in a game for 45 minutes – he opened the score against Marítimo (3–0, home).[6]

On 6 March 2012, Oliveira made his Champions League debut, playing only ten minutes but scoring the final goal in a 2–0 home win against Zenit Saint Petersburg, with Benfica qualifying to the last-eight 4–3 on aggregate.[7]

On 20 August, in the La Liga opener against Osasuna, Oliveira scored his first goal for the Galicians, netting from a counter-attack in the 90th minute to make it 2–0 for the hosts.[9] On 19 May 2013, he found himself in controversy after shushing the Ultras after his goal against Espanyol. He later apologized for his actions.[10] During his spell, he acted as backup to veteran Riki.

On 26 July 2013, Oliveira was loaned to Ligue 1 club Stade Rennais on a season-long move, with the French having the option to make the deal permanent afterwards.[11] He scored his first goal in his second appearance, in a 1–2 loss at Nice.[12]

Oliveira scored twice for Rennes on 24 August 2013, in a 2–1 away win against Evian.[13] He again scored twice, this time against Toulouse in a 5–0 win on 26 October 2013.[14] A week later he scored his seventh goal of the season in a 1–1 draw away to Marseille.[15] After a four-month goal drought, he found the net again against Toulouse in a 3–2 lost on 15 March 2014.[16] He took part of the 2014 Coupe de France Final coming on as a substitute in Rennes' 2–0 loss to Guingamp.[17]

He had a run of games in the first team but did not score again until 6 November, netting the only goal of the game against Forest's local rivals Derby County.[25] He added to his goal tally two games later by scoring a brace against Reading. The first was a curled strike from 20 yards after a quick counterattack and the second, a volley from close range.[26]

He took his goal tally to five after firing a low curling shot after a deft touch against MK Dons.[27] A week later, he scored against Leeds United.[28] He finished the season as the team's highest goalscorer with nine goals.

On 30 August 2016, Oliveira once again returned to the United Kingdom, joining Norwich City after signing a four-year deal with the club. He became Norwich's fifth signing of the transfer window, signing for an undisclosed fee.[29] He scored his first goal for Norwich in an EFL Cup tie (2–2) against Leeds United on 25 October 2016.[30] He scored his first league goal for Norwich on 3 December 2016, against Brentford in a 5–0 win at Carrow Road.[31] In the next four games, he found the net on three occasions against Barnsley,[32]Aston Villa[33] and Reading[34] respectively.

On 2 January 2017, he scored his first professional hat-trick in 3–0 win against Derby County.[35] The following game, he received his first red card after he lashed out on Rotherham defender, Kirk Broadfoot.[36] He returned from suspension, scoring a looping header against Wigan Athletic on 7 February 2017.[37]

In early February, he sustained a foot injury which caused him to be out for five weeks.[38] He returned from injury on 18 March 2017, coming in as a late substitute against Barnsley.[39] He found the back of the net again in a 7–1 blowout win against Reading on 8 April 2017.[40] He scored a brace against Leeds United on 29 April 2017.[41] He finished the season with 15 goals in 32 games in all competitions (including Football League Trophy) for Norwich, a career high tally for Oliveira.[42]

Oliveira ended his first pre-season in 2017 with Norwich, scoring five goals in eight games. After scoring a late equalizer against Fulham on the first day of the 2017/18 season, after coming on as a substitute on 5 August 2017, he proceeded to take his shirt off and angrily reveal his name towards manager, Daniel Farke. After the game Farke played down the controversy saying emotions got the better of him after being left on the bench.[43]

Oliveira played 20 minutes in the group stage opener against Germany after coming on for Hélder Postiga, in an eventual 0–1 loss.[50] He made three other substitute appearances in the tournament, in an eventual semi-final exit.

In Portugal's next game after Euro 2012, Oliveira scored his first international goal, in a 2–0 win against Panama.[51]

Oliveira plays as a Centre Forward, known for his hold up play, his strength, and technique, in 2012, Oliveira was referred to as 'Portugal's Cantona' due to similarities in the 'style' of play between him and Eric Cantona.[54][55]