Hosmer homered off starter Zach McAllister and later doubled and scored against minor leaguer Bryan Price.
''It's getting better every day,'' Hosmer said. ''You try different things to see what works. Opposite-field hits shows you're staying on the breaking ball.''
The Indians took advantage of an errant pickoff throw by Royals starter Jeremy Guthrie. Michael Bourn led off with a walk, then Nick Swisher singled and drew the wild throw by Guthrie to first. Bourn scored on the error, and Jason Kipnis had an RBI single.
Veteran catcher Ramon Hernandez, trying to make the Royals as a non-roster player, put Kansas City ahead 5-3 in the sixth with an RBI single.
Elliot Johnson, also a non-roster player, hit his second home run for the Indians. He singled in his other at-bat, raising his spring average to .429.
''The way he's swinging the bat makes it easy for him to stand out but more important is what he does defensively,'' manager Terry Francona said. ''If you're looking for a guy you can move all over the diamond, you can put him at short, you can put him at center. Those guys are hard to find.''
Royals: Guthrie made his first start since March 3 against the White Sox. He pitched three innings in a minor league game on March 8, allowing two runs (one earned) on three hits. Guthrie set career highs last season with 15 wins and 211 2-3 innings.
Guthrie pitched three innings against the Indians. He gave up three runs (two earned) on five hits, three walks and a hit batter. Guthrie stuck out five.
''I felt more comfortable at the end,'' said Guthrie, who allowed two first-inning runs. ''It was a combination of my grip, release point, balance. I labored at first but got a feel for it as the game went on.''
McAllister made his third spring start. He'd pitched two scoreless innings in his previous two outings, allowing one hit and two walks. The Royals scored twice against him on four hits in 3 1-3 innings.
''I was working on pitching in to righties,'' McAllister said.
McAllister won a job last spring and did nothing over the season to put his job in jeopardy. Now he has the luxury of working on different pitches.
''I come every year to compete,'' McAllister said. ''Even though I'm working on things, I want to be successful.''
Francona told McAllister he is the third member of the rotation.
''I told him today,'' Francona said. ''Maybe I'm making a bigger deal out of it but I want these guys to enjoy what they've accomplished.''
Indians: DH Jason Giambi will the out three to four weeks with a fractured rib on his right side. ... Outfielder Nyjer Morgan has a strained left calf. He is day to day. ... Right-hander J.C. Ramirez fractured his left thumb and sprained a ligament in his left arm. He is scheduled to have surgery on March 17 by Dr. Thomas Graham at the Cleveland Clinic. ... Right-handed pitcher Shaun Marcum will throw live batting practice on Friday. He had thoracic outlet surgery in the offseason. ... Outfielder Bryan LaHair, who had left hand surgery in September, is expected to play in minor league games this weekend. ... Right-handed pitcher Matt Capps was shut down with a strained right shoulder. He started a throwing program on Monday and is currently up to 75 feet.
Royals: Infielder Alicedes Escobar is day to day with a sore arm.
ON THE MARK
Justin Marks pitched two perfect innings with a strikeout for the Royals. The left-hander moved from Double-A Northwest Arkansas to Triple-A Omaha, where he made 20 starts last season. Marks was acquired in a trade with Oakland along with Vin Mazzaro for David DeJesus in 2010.
HOT CORNER IS COOL
Carlos Santana's conversion from catching to third base continues to be a success. He had two chances against the Royals, displaying a strong arm on one play and good instincts on the other. It was the first time he has started at third on back-to-back days.
''He's playing third like a third baseman. That's the best way to put it,'' Francona said. ''He is very athletic.''
Matt Carson homered and doubled for Cleveland, part of a strong contribution by minor leaguers.
''Whoever we've put in at the middle of the game plays hard,'' Francona said. ''That's what makes this camp fun.''
Cooper sustained a serious back injury while making a headfirst dive into first base on a pickoff attempt in 2012 while with Toronto. He hit .300 with four homers and 11 RBIs in 45 games that season for the Blue Jays, and finished last year in Triple-A for the Indians.
Cooper was removed from the 40-man roster when the team recently traded for Justin Sellers from the Los Angeles Dodgers. Cooper cleared waivers and remains in the Indians' camp as a non-roster player.