Martin and the club avoided salary arbitration Wednesday with the deal.
The 30-year-old was obtained by the Indians last season in a trade before the July non-waiver deadline from Detroit. Shortly after he arrived, Martin contracted a serious bacterial infection that affected his vital organs. Martin's condition rapidly worsened before doctors were able to treat and destroy the infection.
Martin played in just six games for the Indians, who acquired him after Bradley Zimmer got hurt.
The Indians are confident Martin will be ready for the start of training camp.
Martin batted .255 with 11 homers and 33 RBI in 84 games for the Tigers and Indians. He has also played for the Cubs, Mariners and Rangers.