从 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快速定义变量。
感谢您阅读标题和支持。
- 将
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,否则将出现清单合并错误。
- 您可以使用以下行从您的库代码访问
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"]
}
Manifest 合并现在将使用来自应用程序和库的值覆盖占位符,将在应用程序包中看到已更改的值
您可以使用此想法从以下位置克隆示例项目:
https://github.com/mdawid/ManifestPlaceholderLib
我正在编写一个库。这个库通过在后台与云端通信来发送数据。但是图书馆有多个用户。我有一个用于识别每个应用程序(用户)的 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快速定义变量。
感谢您阅读标题和支持。
- 将
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,否则将出现清单合并错误。
- 您可以使用以下行从您的库代码访问
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"]
}
Manifest 合并现在将使用来自应用程序和库的值覆盖占位符,将在应用程序包中看到已更改的值
您可以使用此想法从以下位置克隆示例项目: https://github.com/mdawid/ManifestPlaceholderLib