gpt4 book ai didi

java - 从gradle文件读取变量到库

转载 作者:行者123 更新时间:2023-12-02 09:46:07 26 4
gpt4 key购买 nike

我正在写一个库。该库通过在后台与云端通信来发送数据。但图书馆有多个用户。我有一个 ID,用于识别每个应用程序(用户)。库需要此 ID 才能进行通信。

我的主要问题从这里开始。当用户将我的库添加到依赖项时,我想将 ID 值添加到一个变量中,该变量将添加到 Gradle 文件中,并从库中获取该值以确保通信。 (就像Gradle中的OneSignal AppID)

我不是在询问获取应用程序包 ID..

但我不知道如何添加它以及如何从库内访问这个变量,我需要你的帮助。

我做过相关研究,但人们还没有分享这方面的信息,所以我无法进行实验。我在打开标题之前也进行了搜索,并在打开标题时检查了相关标题,但无法得出结论。

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
google()
jcenter()

}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
jcenter()

}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

我想访问库中Gradle上定义的AppID以实现数据通信。

通过这种方法,用户只需将我的库添加到依赖项中,即可使用 Gradle 快速定义变量。

感谢您阅读标题并给予支持。

最佳答案

  1. manifestPlaceholders 属性添加到您的库build.gradle
apply plugin: 'com.android.library'

android {
defaultConfig {
...
manifestPlaceholders = [my_app_id: "\${my_app_id}"] // <- important backslash!!!
}
}
  • 将带有占位符的元数据添加到您的 AndroidManifest.xml 库
  • <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mylibrary">
    <application>
    <meta-data android:name="my_app_id" android:value="${my_app_id}" />
    </application>
    </manifest>

    反斜杠转义$,android合并将在AndroidManifest.xml内插入原始文本${my_app_id}。从现在开始,每个使用此库的应用都必须使用 my_app_id 键定义 manifestPlaceholder,否则将会出现 list 合并错误。

  • 您可以使用以下行从库代码访问 my_app_id:
  • public class MyLibrary {
    public static String init( Context context ) {
    try {
    ApplicationInfo ai = context.getPackageManager().getApplicationInfo( context.getPackageName(), PackageManager.GET_META_DATA );
    return (String)ai.metaData.get( "my_app_id" );
    } catch ( PackageManager.NameNotFoundException e ) {
    //TODO: handle exception
    }
    ...
    }

    当您的应用包含该库时,它还会将 AndroidManifest.xml 与要填充的占位符合并。您必须在应用程序的 build.gradle 中定义 my_app_id

    apply plugin: 'com.android.application'

    android {
    defaultConfig {
    ...
    manifestPlaceholders = [my_app_id: "686adbd9-c3c4-458d-ab8c-d549f5d71de3"]
    }

    list 合并现在将使用应用程序中的值覆盖占位符,并且库将在应用程序包中看到更改后的值

    您可以通过以下方式克隆示例项目: https://github.com/mdawid/ManifestPlaceholderLib

    关于java - 从gradle文件读取变量到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56639355/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com