是否可以从AndroidManifest.xml访问BuildConfig值?
在我的build.gradle文件中,我有:
defaultConfig {
applicationId "com.compagny.product"
minSdkVersion 16
targetSdkVersion 21
versionCode 1
versionName "1.0"
// Facebook app id
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
}
Run Code Online (Sandbox Code Playgroud)
FACEBOOK_APP_ID 在我的gradle.properties文件中定义:
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
要在我的应用中使用Facebook连接,我必须将此行添加到我的AndroidManifest.xml:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
Run Code Online (Sandbox Code Playgroud)
我想用gradle中定义@string/applicationId的BuildConfig字段FACEBOOK_APP_ID替换,如下所示:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
Run Code Online (Sandbox Code Playgroud)
使用BuildConfig可以吗?如果没有,我怎么能实现这个目标?
当我在调试模式下运行我的应用程序时,BuildConfig.DEBUG无效(=逻辑设置为false).我用Gradle来构建.我有一个图书馆项目,我在这里检查.BuildConfig.java在构建调试文件夹中看起来像这样:
/** Automatically generated the file. DO NOT MODIFY */
package common.myProject;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
}
Run Code Online (Sandbox Code Playgroud)
并在发布文件夹中:
public static final boolean DEBUG = false;
Run Code Online (Sandbox Code Playgroud)
在库项目和应用程序项目中.
我试图通过检查一个设置了我的项目类的变量来解决这个问题.该类继承自库并在启动时启动.
<application
android:name=".MyPrj" ...
Run Code Online (Sandbox Code Playgroud)
这导致了另一个问题:我在应用程序类之前运行的DataBaseProvider中使用我的DEBUG变量,并且由于此错误它将无法正常运行.
我已sdk.dir和ndk.dir在local.properties.
如何阅读中定义的值sdk.dir和ndk.dir中build.gradle文件?
每次我发布我的应用程序时,我都会将所有的url字符串和一些键从测试更改为生产.我这样做的方法就是在发布之前注释掉测试字符串.有没有更好的方法来处理基于构建类型的字符串?
我正在使用Gradle作为其构建系统的Android应用程序.
我的目标是使用值(包名称)作为applicationId:
productFlavors {
orange {
applicationId "com.fruits.android.orange"
// ...
Run Code Online (Sandbox Code Playgroud)
但也要通过它来公开它,BuildConfig以便Java代码可以访问它.
此访问必须来自外部风格(即,应用程序的免费版本需要知道付费版本的软件包名称,以便它可以提示用户在Play商店中进行升级).
所以我想做那样的事情:
productFlavors {
orange {
applicationId orangeProPackage
// ...
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ?
Run Code Online (Sandbox Code Playgroud)
只有我不确定如何定义,orangeProPackage以便它在整个build.gradle中可见,并且不会破坏脚本.
因为有几种不同的味道,最好是我能以某种方式将所有这些常量分组(我猜?):
def proPackages = [
orange: "..."
apple: "..."
banana: "..."
]
Run Code Online (Sandbox Code Playgroud)
然后以干净和描述性的方式引用它们等proPackages.orange.
问题是,如何实现这一目标?
这不是重复的是否可以在Gradle中声明一个可用于Java的变量?
我已经看到了这个问题(以及其他一些问题).我知道如何声明buildConfigFields,我已经有很多了.我的问题是重用与a buildConfigField 和 applicationId.相同的价值.
在查看BuildConfig由Android Studio和Gradle插件生成的类时,可以看到该BuildConfig.DEBUG字段是使用Boolean.parseBoolean(String)调用初始化的,而不是使用其中一个布尔文字true或false.
当我使用Gradle添加自定义构建属性时,我会这样做:
android {
buildTypes.debug.buildConfigField 'boolean', 'SOME_SETTING', 'true'
}
Run Code Online (Sandbox Code Playgroud)
但是看看生成的信息BuildConfig告诉我谷歌采用了与DEBUG旗帜不同的方法:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
// more fields here
// Fields from build type: debug
public static final boolean SOME_SETTING = true;
}
Run Code Online (Sandbox Code Playgroud)
使用Boolean.parseBoolean(String)而不是文字有什么好处?
我想创建一个类似于applicationId的全局变量.它是build.gradle中的设置值,将在清单中使用.可能吗?
我正在使用AndroidStudio,我有以下内容:
我想设置我的"通信"模块的gradle文件来实现以下目的:
作为app模块的gradle,我可以为BuildConfig.java文件设置变量,例如:
buildTypes {
release {
...
buildConfigField "String", "SERVER_URL", '"my_url"'
}
debug {
buildConfigField "String", "SERVER_URL", '"my_url"'
}
}
Run Code Online (Sandbox Code Playgroud)然后我可以使用它们 BuildConfig.SERVER_URL
问题是:如何使用Java Library模块实现此目的?
java android module android-gradle-plugin android-buildconfig
我需要在build.gradle中计算整数值,然后在我的Java代码中使用它.我尝试:
的build.gradle:
android {
defaultConfig {
resValue "int", "MY_VAR_NAME", "123"
}
}
Run Code Online (Sandbox Code Playgroud)
值目录中的preprocess.xml:
<integer name="my_int_value">MY_VAR_NAME</integer>
Run Code Online (Sandbox Code Playgroud)
我收到一个错误Cannot resolve symbol MY_VAR_NAME.
如何使用它?有手册吗?
好的,这是我当前的build.gradle:
apply plugin: 'com.android.application'
apply from: '../config.gradle'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId ""
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
resValue "int", "amountOfTables", amountOfTables
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
howManyTables.execute()
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.pnikosis:materialish-progress:1.4'
}
Run Code Online (Sandbox Code Playgroud)
这就是config.gradle:
def amountOfTables = 15
task howManyTables << {
println amountOfTables
}
Run Code Online (Sandbox Code Playgroud)
问题是:为什么我可以从config.gradle访问howManyTables任务.但无法访问已定义的变量?我想创建具有预定义值的自定义config.gradle.然后在我的Android应用中将它们用作变量.(如baseURL,数据类型等...).而他们,根据这些数据构建我的逻辑.无论如何,问题很明显我希望;)任何想法?
android ×9
gradle ×5
android-xml ×1
build ×1
build.gradle ×1
buildconfig ×1
groovy ×1
java ×1
module ×1