Bowled out for 133, the Sri Lankans hit back to skittle the impatient Afghan batsmen for 65 in the Twenty20 match watched by a full house at the 2,500-capacity Yeonhui field in Incheon.
Leg-spinner Jeevan Mendis grabbed three wickets for 13 runs and Isuru Udana and Chaturanga de Silva chipped in with two wickets apiece as the Afghans folded up in 17.4 overs.
Eight batsmen failed to reach double figures for Afghanistan, who are set to make their debut in the 50-over World Cup in Australia and New Zealand next year.
It was Sri Lanka's first Asiad gold medal since the 2002 Games in Busan when Susanthika Jayasinghe won the women's 100m and Damayanthi Darsha picked up the women's 400m title.
Afghanistan have so far won five silvers - including two in cricket - and six bronzes since starting out in the inaugural Asiad in New Delhi in 1951.
The cricket silver was their second medal in the current Games after Roman Abasi's bronze in taekwando.
Sri Lanka, who elected to bat after winning the toss, rode on Dinesh Chandimal's 33 and skipper Lahiru Thirimanne's 57 off 37 balls to race to 79-1 in 10 overs.
The spirited Afghans fought back to claim the last nine wickets for 54 runs and bowl the Lankans out with five deliveries to spare.
Skipper Mohammad Nabi took four wickets for 18 runs in 19 deliveries of off-spin and seamer Gulbadin Naib claimed two for 20 to cause an unexpected collapse.
Defending champions Bangladesh, who lost a rain-abandoned semi-final to Sri Lanka by the flip of the coin, claimed the bronze with a 27-run win over Hong Kong earlier.
Star allrounder Shakib Al Hasan smashed 46 off 37 balls and claimed two for 23 as the Tigers displayed superior skills than the minnows.
Bangladesh, batting first, piled up 162-6 in their 20 overs as Mohammad Mahmudullah smashed 35 off 21 balls lower down the order.
Hong Kong's Pakistan-born left-arm spinner Nadeem Ahmed took three wickets for 36 runs.
Hong Kong managed only 135-7 in reply, with Mark Chapman leading the way with a 31-ball 38 that contained two sixes and as many fours.
Bangladesh's experienced attack slowed the run-rate as left-arm spinner Arafat Sunny supported Shakib with three wickets for 22 runs.
"We were disappointed that the semi-final was washed out which deprived us the chance to go for gold," said Bangladesh all-rounder Mohammad Mahmudullah said. "But we won't go from here empty-handed.
"This was my first Asian Games and it was fantastic to take part. Playing in a new venue like Incheon was so exciting," he added.