Flutter将变量注入配置文件并调试AndroidManifest.xml

sqxo8psd  于 2023-06-04  发布在  Android
关注(0)|答案(1)|浏览(210)

我目前正在从build.gradle向./android/app/src/main/AndroidManifest.xml注入变量值

defaultConfig {
      ...
      manifestPlaceholders = [
            ...
            appPackageName: tenant.appPackageName,
      ]
    }

我希望能够将相同的值分别注入到配置文件和调试文件夹中的两个内置清单文件中,例如

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="${appPackageName}"> <-- THIS HERE
  <!-- Flutter needs it to communicate with the running application
     to allow setting breakpoints, to provide hot reload, etc.
  -->
  <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

但我好像想不明白。我确信一定有一种方法可以从build.gradle中做到这一点,但不确定具体在哪里。

bfrts1fy

bfrts1fy1#

我会回答自己的问题:

  • 创建了一个bash脚本,它接受一个.json配置文件和一个模板,并在项目的根目录中创建配置文件。其结果类似于
appPackageName=my.project.example
  • 我创建了一个gradle文件来公开这些变量的值
class TenantProperties {
    def appPackageName

    TenantProperties(Properties tenantProperties) {
        this.appPackageName = tenantProperties.getProperty('appPackageName')
    }
}

def tenantProperties = new Properties()
def tenantPropertiesFile = rootProject.file('tenant.properties')
if (tenantPropertiesFile.exists()) {
    tenantPropertiesFile.withReader('UTF-8') { reader ->
        tenantProperties.load(reader)
    }
}
ext {
    tenant = new TenantProperties(tenantProperties)
}
  • appPackageName的值现在在build.gradle中可用。对我有效的方法是根据appPackageName的值动态更改“namespace”
android {
  ...
  namespace tenant.appPackageName
  ...
}
  • 我的所有AndroidManifest.xml现在都可以使用该值作为“package”
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="${appPackageName}"> <-- NO PROBLEM HERE!
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

相关问题