1. 什么是applicationlibrary

  • com.android.application
    表示这个模块会被打包成一个 独立可运行的 APK
    它必须有:
    • applicationId(APK 的唯一包名)
    • AndroidManifest.xml里声明的<application>和至少一个<activity>
    • 最终能安装到手机上运行
  • com.android.library
    表示这个模块只会编译成一个 AAR(Android Archive)包,相当于一个“依赖库”。
    它不能独立运行,没有applicationId,但可以包含:
    • Activity/Service/View 等组件
    • 被其他application模块引用后,才能运行里面的逻辑

2. 为什么改成library就能运行

报错的核心原因是:

你工程里有多个com.android.application模块(比如hilt-bestpracticespopupwindow-bestpractices),Gradle 无法判定到底哪个是 主应用 (base app),就会把它们误认为是 Dynamic Feature,于是抛出This application is not configured to use dynamic features

换句话说:

  • 如果你只有一个application→ 没问题
  • 如果你有多个application→ 必须显式指定一个 base app,其它必须是 dynamic-feature,否则就冲突

当你把popupwindow-bestpractices改成library后,Gradle 就知道:

  • 唯一的applicationhilt-bestpractices
  • popupwindow-bestpractices只是它依赖的 library
    因此编译顺利通过。

3. 改成library会不会影响模块启动?

会的。区别在于:

  • 如果模块是 application
    它能自己打包一个 APK,单独安装运行。
  • 如果模块是 library
    它不能单独运行,必须依赖到某个application模块中,才能随着那个 app 一起运行。

所以你现在改成了library,意味着:

  • 不能再单独启动popupwindow-bestpractices这个模块的 Activity
  • 必须通过hilt-bestpractices里的 Application 启动它(依赖 + Manifest merge)

更新: 2025-08-24 23:49:26
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/qua82ohv98v444fs