Armstead played in all 13 games as a true freshman in 2012, making one start. He finished the 2012 season with 26 tackles and a half-sack. During the spring he joined the Ducks basketball team, where he redshirted his first year. Armstead played in 13 games as a sophomore in 2013, recording 15 tackles and one sack. During the spring he re-joined the basketball team. He played in one game, before quitting to focus on football. Armstead returned to the football team his junior season in 2014.
Professional career
The San Francisco 49ers selected Armstead in the first round in the 2015 NFL Draft. He was the fourth defensive end selected in 2015.
2015 season: Rookie year
Armstead was unable to attend training camp and organized team activities until Oregon's school year had concluded due to the NFL's policy that prohibits rookies joining teams until their year is officially completed. Upon arrival, he was competing for the job as the starting defensive end against Quinton Dial, Darnell Dockett, Glenn Dorsey, and Tank Carradine after it was left vacant due to the retirement of Justin Smith. Head coachJim Tomsula named him the fifth defensive end on the depth chart to begin the regular season, behind Quinton Dial, Glenn Dorsey, Tank Carradine, and Tony Jerod-Eddie. Armstead made his NFL debut in the season-opening 20–3 victory against the Minnesota Vikings. During the game, Armstead recorded one tackle for loss. In Week 3 of the season, Armstead recorded three combined tackles and made his first NFL sack on quarterback Carson Palmer for a four-yard loss during a 47–7 road loss to the Arizona Cardinals. In Week 11, he collected a season-high six combined tackles in a 29–13 loss at the Seattle Seahawks. In Week 17, Armstead earned his first NFL start and made a solo tackle during a 19–16 overtime victory over the St. Louis Rams. Armstead finished his rookie year with 19 combined tackles and two sacks in 16 games played with one game started.
2016 season
The San Francisco 49ers hired Chip Kelly as their new head coach and who was previously Armstead's head coach at Oregon. Armstead competed to be the starting defensive end after Glenn Dorsey was moved to nose tackle. Armstead competed against DeForest Buckner and Quinton Dial. Kelly named Armstead and Dial the starting defensive ends for Week 1. In week 1 against the Los Angeles Rams, Armstead recorded his first sack of the season on Case Keenum during the 28–0 shutout win. In week 6 against the Buffalo Bills, Armstead recorded a strip sack on Tyrod Taylor which was recovered by former college teammate DeForest Buckner during the 45–16 loss. On November 8, 2016, the 49ers placed Armstead on injured reserve with a left shoulder injury. A week later, he had surgery to repair the injured shoulder. Armstead finished his second season with 15 combined tackles, a forced fumble, and 2.5 sacks in eight games and four starts.
2017 season
In week 2 against the Seattle Seahawks, Armstead recorded his first and only full sack of the season on Russell Wilson during the 12–9 loss. On October 17, 2017, Armstead was placed on injured reserve after suffering a broken hand in Week 6. He finished his third season with 16 combined tackles, 1.5 sacks, and a pass deflection in six games.
2018 season
On April 30, 2018, the 49ers picked up the fifth-year option on Armstead's contract. In week 3 against the Kansas City Chiefs, Armstead recorded his first sack of the season on Patrick Mahomes during the 38–27 loss. In week 7 against the Los Angeles Rams, Armstead recorded a season high 5 tackles and sacked Jared Goff once during the 39–10 loss. In the following week's game against the Arizona Cardinals, Armstead sacked rookie quarterback Josh Rosen once during the 18–15 loss. Armstead finished the season with 48 tackles and three sacks in 16 games started.
2019 season
In week 1 against the Tampa Bay Buccaneers, Armstead recorded his first sack of the season on Jameis Winston during the 31–17 win. In week 3 against the Pittsburgh Steelers, Armstead forced a fumble on James Conner which was recovered by DeForest Buckner late in the fourth quarter to help seal a 24–20 win. In week 6 against the Los Angeles Rams, Armstead recorded a season high 6 tackles, half a sack on Jared Goff, and recovered a fumble lost by Goff during the 20–7 win. In week 7 against the Washington Redskins, Armstead sacked Case Keenum once during the 9–0 win. With that sack, Armstead a new single season career high of 3.5 sacks. In the following week's game against the Carolina Panthers, Armstead sacked Kyle Allen twice during the 51–13 win. In week 10 against the Seattle Seahawks on Monday Night Football, Armstead sacked Russell Wilson 1.5 times during the 27–24 overtime loss. In week 12 against the Green Bay Packers on Sunday Night Football, Armstead sacked Aaron Rodgers twice during the 37–8 win. The 2019 season was a breakout season for Armstead. He recorded 54 tackles, a team-leading 10 sacks, two forced fumbles, and a fumble recovery in 16 games started. He also ranked 2nd on the 49ers regarding tackles for loss. Armstead made his playoff debut in the NFC Divisional Round of the playoffs against the Minnesota Vikings. During the game, Armstead sacked Kirk Cousins once in the 27–10 win. In the NFC Championship Game against the Packers, Armstead sacked Aaron Rodgers once during the 37–20 win. In Super Bowl LIV against the Kansas City Chiefs, Armstead recorded 3 tackles during the 31–20 loss.
2020 season
On March 16, 2020, Armstead signed a five-year, $85 million contract extension with the 49ers with $48.5 million guaranteed.