Preheat oven to 350°F and grease a 9x9 or 8x11 baking pan.
Whisk together flour, baking powder, baking soda, and salt; set aside.
Using a mixer, beat butter or oil with sugar until creamy.
Add eggs one at a time, then vanilla and almond extracts, beating until combined.
Add half of the dry ingredients, beat until just combined, then add sour cream and milk.
Beat in the remaining dry ingredients until just combined.
Gently fold in cranberries using a spatula.
Pour batter into prepared pan and smooth the top.
Mix butter, sugar, flour, and almond extract for topping, then stir in sliced almonds.
Sprinkle almond topping evenly over batter.
Bake 28-38 minutes until a toothpick comes out clean or with moist crumbs.
Cool cake on a wire rack.
Whisk powdered sugar, milk, and almond extract for icing; adjust consistency.
Drizzle icing over cooled cake before serving.