Meanwhile, Shields (3-3) allowed eight runs -- seven of them earned -- on 12 hits, a walk and a hit batter in 6 1/3 innings. It was the worst outing for the Royals ace since last September, when Shields allowed 10 runs in another lousy start against the Tigers.
"I threw some good pitches. That's a good hitting ball club over there," he said. "I wasn't locating my pitches. I was getting behind in the count. I didn't do my job out there, bottom line. I've got to do a better job of getting outs. It's just one of those games."
As if that wasn't bad enough, the Royals also lost All-Star catcher Salvador Perez when he fouled a pitch off his shin in the seventh inning. He was listed as day to day with a bruise.
Shields first got into trouble in the second, when he loaded the bases but escaped the jam unscathed. But things only got worse in the third, when a single by Torii Hunter and back-to-back doubles by Miguel Cabrera and Victor Martinez gave Detroit a 2-1 lead.
They never gave it back the rest of the game.
J.D. Martinez kept the onslaught going when he led off the fourth with a double, and Avila followed by hitting the first pitch of his at-bat for his first homer of the season. Detroit added another run later in the inning when Andrew Romine reached third on an error by the Royals' Mike Moustakas, and then scored on a double-play groundout.
Butler provided the only bright spot the rest of the way for Kansas City, guiding a line drive over the fence in left field for his first homer of the season -- and the first by any hitter batting in the cleanup spot in the Royals lineup.
"I knew I hit it good. I didn't know if it was high enough to get out," Butler said. "I knew I hit it hard, but didn't hit it very high. I couldn't see if it was fair or foul. I knew it was really close, too."
Shields was finally pulled in the seventh, allowing another run and leaving the bases loaded while recording one out. Reliever Kelvin Herrera gave up a double to J.D. Martinez that brought in two more runs and gave the Tigers an 8-2 lead.
That was plenty of support for Porcello, who had been miserable in the month of April until this season, when he went 3-1 with a 3.96 ERA. He kept that momentum going against Kansas City, a team he oddly never faced last season, retiring his final 12 batters.
"He's been throwing the ball great all season long," Victor Martinez said. "He's showing he's young but he knows what he's doing out there. He's giving us a great chance to win ballgames."
The Tigers announced the signing of RHP Joel Hanrahan on Friday. The former All-Star underwent Tommy John surgery last May after nine appearances for the Red Sox. ... The Royals put LHP Bruce Chen (bulging disc) on the DL and recalled RHP Aaron Brooks from Triple-A Omaha. ... LHP Drew Smyly will start for Detroit on Saturday. LHP Danny Duffy is on the mound for Kansas City.