繁体   English   中英

从gradle文件读取变量到库

[英]Reading variable from gradle file to library

我正在写一个图书馆。 该库通过在后台与云通信来发送数据。 但该库有多个用户。 我有一个用于识别每个应用程序(用户)的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!!!
    }
}
  1. 使用占位符将元数据添加到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,否则将出现清单合并错误。

  1. 您可以使用以下行从库代码访问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与占位符合并以进行填充。 您必须在app的build.gradle中定义my_app_id

apply plugin: 'com.android.application'

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM