Match ends, SV Werder Bremen 0, FC Bayern München 1.
Bayern Munich celebrated in a near-empty stadium after securing an outstanding eighth successive title.
Robert Lewandowski chested down Jerome Boateng's chipped pass to net the winner against Werder Bremen - and seal the league with two games to spare.
Bayern's 11th straight Bundesliga win put them 10 points clear of Borussia Dortmund, who have three games left.
Bayern finished the match with 10 men after Alphonso Davies was sent off for two yellow-card offences.
Poland striker Lewandowski has scored 31 league goals this season, a tally that equals the single-season scoring record by a foreign player in the league. Pierre-Emerick Aubameyang, now at Arsenal, scored 31 Bundesliga goals for Borussia Dortmund in 2016-17.
Bayern were far from their best against a Werder Bremen side fighting for survival at the other end of the table.
With the game goalless, Bremen's Maximilian Eggestein went close from distance before Lewandowski's quality winner after Kingsley Coman had earlier headed narrowly wide.
Coman again went close before teenager Davies was sent off with 11 minutes remaining, while Werder Bremen had a late appeal for a penalty for handball turned down.
Bayern celebrate in unusual circumstances
Seven points clear of nearest rivals Borussia Dortmund with three games to go before kick-off, Bayern needed one win from their remaining three games to wrap up another title.
Hansi Flick's side did just that - but they got over the line in unusual circumstances.
When Bayern won the title on the final day of last season, they did so after an emphatic 5-1 win over Eintracht Frankfurt in front of 75,000 fans at the Allianz Arena.
On Tuesday, there were no supporters present inside Werder Bremen's 42,000-capacity Weserstadion as they wrapped up the title in pouring rain.
The full-time whistle was greeted with shouts of delight from Bayern's players which echoed around the empty stadium, but it was a far cry from previous title celebrations before the coronavirus pandemic.
"It is sensational the kind of football we have played in the past few months," said Flick, a four-time Bundesliga winner with Bayern as a player.
"You could feel the passion, the joy for the game and the team spirit."
From a humiliating 5-1 defeat to champions
With matches at home to Freiburg and away to Wolfsburg still to come, Bayern's latest domestic triumph looks relatively straightforward but it required a managerial change to kick-start their season after a poor opening.
After an embarrassing 5-1 defeat at Eintracht Frankfurt on 2 November, Bayern were fourth in the table, four points behind early-season leaders Borussia Monchengladbach.
That result spelt the end of Niko Kovac's 16-month reign, Flick appointed interim boss before signing a new contract until 2023 in April.
And Bayern have flourished under the 55-year-old former Germany assistant.
This result means they have taken 58 points from a possible 66, yet their season is far from over.
While Bayern have progressed to the final of the German Cup, where they will meet Bayer Leverkusen on 4 July in Berlin, the five-time champions of Europe are still in the Champions League and are well placed to reach the quarter-finals after establishing a 3-0 lead over Chelsea in the first leg of their last-16 tie.
"We have now taken the first step and reached our big goal," added Flick.
"But we also have the cup in our sights and then obviously the Champions League games are something you cannot plan for and we still need to survive the Chelsea game."
Nine league titles at one club - the stats
- David Alaba and Thomas Muller win their ninth Bundesliga championship title, equalling the record set by Franck Ribery last season.
- Hansi Flick is the third person to win the Bundesliga title for Bayern both as a player and a manager, after Franz Beckenbauer and Niko Kovac. Flick won the Bundesliga title as a Bayern player in 1985-86, 1986-87, 1988-89 and 1989-90.
- In Europe's top five leagues, only Juventus (35 in Serie A) and Real Madrid (33 in La Liga) have won more league titles than Bayern (30, including pre-Bundesliga era).
- 13VeljkovicSubstituted forPizarroat 88'minutes
- 3VogtSubstituted forLangkampat 45'minutesBooked at 88mins
- 23Gebre Selassie
- 35EggesteinBooked at 56mins
- 30KlaassenSubstituted forFüllkrugat 84'minutes
- 10BittencourtSubstituted forSargentat 62'minutes
- 7RashicaSubstituted forBartelsat 62'minutes
- 19DaviesBooked at 79mins
- 32KimmichBooked at 89mins
- 22GnabrySubstituted forHernándezat 82'minutes
- 34Batista Meier
- Harm Osmers
- Shots on Target
Second Half ends, SV Werder Bremen 0, FC Bayern München 1.
Corner, FC Bayern München. Conceded by Theodor Gebre Selassie.
Corner, FC Bayern München. Conceded by Sebastian Langkamp.
Attempt blocked. Robert Lewandowski (FC Bayern München) header from the centre of the box is blocked. Assisted by Joshua Kimmich with a cross.
Corner, FC Bayern München. Conceded by Marco Friedl.
Corner, FC Bayern München. Conceded by Sebastian Langkamp.
Kingsley Coman (FC Bayern München) wins a free kick in the defensive half.
Foul by Yuya Osako (SV Werder Bremen).
Attempt missed. Maximilian Eggestein (SV Werder Bremen) right footed shot from outside the box is high and wide to the right. Assisted by Joshua Sargent.
Attempt saved. Yuya Osako (SV Werder Bremen) header from the centre of the box is saved in the bottom left corner. Assisted by Fin Bartels.
Joshua Kimmich (FC Bayern München) is shown the yellow card for a bad foul.
Foul by Joshua Kimmich (FC Bayern München).
Niklas Moisander (SV Werder Bremen) wins a free kick in the defensive half.
Substitution, SV Werder Bremen. Claudio Pizarro replaces Milos Veljkovic.
Sebastian Langkamp (SV Werder Bremen) is shown the yellow card for a bad foul.
Robert Lewandowski (FC Bayern München) wins a free kick on the right wing.
Foul by Sebastian Langkamp (SV Werder Bremen).
Attempt blocked. Joshua Sargent (SV Werder Bremen) right footed shot from the centre of the box is blocked. Assisted by Theodor Gebre Selassie with a headed pass.
Foul by David Alaba (FC Bayern München).