Armagh did not relent after the break and O’Neill got his second two-pointer to extend their advantage.
Dublin continued to be the architects of their own downfall as three times in a matter of minutes they were penalised for not keeping three players up in the other half, allowing Grugan to stroke home three easy frees.
Costello missed a two-point free off the ground before making amends a few minutes later with a fine two-pointer to bring Dublin back within five.
Points from Ethan Rafferty and Darragh McMullan steadied Armagh, but another two-pointer from Sean Bugler kept the hosts believing they could fight back.
Bugler, Costello and John Small were all guilty of adding to Dublin’s wide count, with such misses proving costly in the end.
Substitute Stefan Campbell tagged on a point while O’Neill got his third two-pointer by kicking a free off the ground to widen the gap further.
Dublin kept coming back with another two-pointer, this time from Paddy Small again cutting the deficit.
Another point from a substitute, this time Joe McElroy, kept the scoreboard ticking over and Dublin failed in a late push to get back in the game as Armagh saw out the win.
McGeeney’s side will face Galway in their final game while Dublin take on Derry on the weekend of 14/15 June, knowing a win would secure their passage to the next round.

