相关疑难解决方法(0)

如何在AndroidManifest.xml文件中访问BuildConfig值?

是否可以从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可以吗?如果没有,我怎么能实现这个目标?

android android-xml android-facebook android-gradle-plugin

127
推荐指数
4
解决办法
4万
查看次数

使用gradle构建库项目时,BuildConfig.DEBUG始终为false

当我在调试模式下运行我的应用程序时,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变量,并且由于此错误它将无法正常运行.

android gradle android-library

81
推荐指数
6
解决办法
4万
查看次数

如何读取build.gradle中local.properties中定义的属性

我已sdk.dirndk.dirlocal.properties.

如何阅读中定义的值sdk.dirndk.dirbuild.gradle文件?

android android-gradle-plugin

78
推荐指数
7
解决办法
4万
查看次数

Android用于发布和调试版本的单独字符串值

每次我发布我的应用程序时,我都会将所有的url字符串和一些从测试更改为生产.我这样做的方法就是在发布之前注释掉测试字符串.有没有更好的方法来处理基于构建类型的字符串?

android gradle android-build android-build-flavors

18
推荐指数
2
解决办法
9861
查看次数

如何在Gradle构建脚本(Android)中定义和使用常量?

我正在使用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.相同的价值.

groovy android build gradle android-productflavors

17
推荐指数
1
解决办法
1万
查看次数

为什么BuildConfig类使用Boolean.parseBoolean()而不是文字值?

在查看BuildConfig由Android Studio和Gradle插件生成的类时,可以看到该BuildConfig.DEBUG字段是使用Boolean.parseBoolean(String)调用初始化的,而不是使用其中一个布尔文字truefalse.

当我使用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)而不是文字有什么好处?

android buildconfig android-gradle-plugin

11
推荐指数
1
解决办法
2261
查看次数

在gradle中设置可以在清单文件中使用的全局变量

我想创建一个类似于applicationId的全局变量.它是build.gradle中的设置值,将在清单中使用.可能吗?

android build.gradle android-gradle-plugin

10
推荐指数
3
解决办法
6093
查看次数

Java模块中BuildConfig的等价物是什么? - Android

我正在使用AndroidStudio,我有以下内容:

  • 主Android项目:app
  • Java Library:沟通

我想设置我的"通信"模块的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

10
推荐指数
2
解决办法
2391
查看次数

如何使用resValue?

我需要在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.

如何使用它?有手册吗?

android gradle

7
推荐指数
1
解决办法
2608
查看次数

如何从另一个gradle文件访问值?

好的,这是我当前的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,数据类型等...).而他们,根据这些数据构建我的逻辑.无论如何,问题很明显我希望;)任何想法?

gradle android-gradle-plugin

7
推荐指数
1
解决办法
2846
查看次数