McCarron started the game and completed 3 of 6 passes for 12 yards. He was sacked once in the first quarter but remained in the game until early in the second.
In four offensive possessions Friday with McCarron at quarterback, the Bills' first-team offense gained a net total of 7 yards and did not gain a first down.
"All I really know right now is that he hurt his right shoulder," Bills coach Sean McDermott said. "He'll have some more tests when we get back."
McCarron was replaced by rookie first-round pick Josh Allen, who led the Bills' first-team offense on an 80-yard touchdown drive in the second quarter. Allen played three possessions, completing 9 of 13 passes for 60 yards and a 2-yard touchdown pass to wide receiver Rod Streater. He was replaced by Nathan Peterman in the third quarter. Buffalo won 19-17.
The Bills have rotated their quarterbacks throughout training camp and the preseason as part of a three-way competition for the starting job. Peterman started the preseason opener before being replaced in that game by McCarron, who went 7-of-10 passing for 116 yards. Peterman and McCarron have generally split first-team snaps in practice.
McCarron signed a two-year, $10 million contract with Buffalo in March after four seasons with the Cincinnati Bengals. The deal included a $4 million signing bonus, a fully guaranteed $900,000 base salary in 2018 and had $1.1 million of his 2019 base salary guaranteed for injury.