如何防止使用 Gradle build 在 Crashlytics 中为应用程序生成版本
How do I prevent versions from being generated for app in Crashlytics with Gradle build
我希望在构建时控制构建是否会为我的应用程序创建一个版本。我目前只为特定的 Jenkins 作业启用了 Crashlytics(事实上,如果它不是由我的发布作业构建的,则甚至不会应用该插件),而我的 Jenkins PR 作业同时构建调试和发布。
不幸的是,这似乎仍然会导致 PR 作业的功能分支构建出现在我的应用程序的版本列表中 - 当我尝试过滤最近发布的版本时,这会使搜索栏变得混乱。
我怎样才能做到 没有任何东西 被发送到 crashlytics 服务器?我是否需要隔离 Fabric.with() 调用,以便在禁用 crashlytics 的情况下不使用 运行?与目前相反,它是 运行 和:
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(!enableCrashlytics()).build())
.build();
Fabric.with(this, crashlyticsKit);
够了吗?
注意:我看过这个问题,Mike 的回复不可行
来自 Fabric 的迈克。
您根本不需要初始化 Fabric。您的初始化代码会阻止 Crashlytics 被初始化,但不会阻止 Answers,因此数据仍会被发送。
或者,将您的构建分开,这样只有生产构建的数据才流入您的生产构建的组织,然后让所有其他构建流入不同组织的同一个应用程序。类似于 this:
// The following code allows an app to report Crashlytics crashes separately
// for release and debug buildTypes when using Gradle. This code should be inserted
// into the specified locations within your build.gradle (Module:app) file
// The buildTypes { } block should be inserted inside the android { } block
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ext.crashlyticsApiSecret = "release api secret"
ext.crashlyticsApiKey = "release api key"
}
debug {
ext.crashlyticsApiSecret = "debug api secret"
ext.crashlyticsApiKey = "debug api key"
}
}
// The following code can be inserted at the bottom of your build.gradle file
import com.crashlytics.tools.utils.PropertiesUtils
File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
android.applicationVariants.all { variant ->
def variantSuffix = variant.name.capitalize()
def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
Properties properties = new Properties()
println "...copying apiSecret for ${variant.name}"
properties.put("apiSecret", variant.buildType.ext.crashlyticsApiSecret)
println "...copying apiKey for ${variant.name}"
properties.put("apiKey", variant.buildType.ext.crashlyticsApiKey)
PropertiesUtils.injectPropertyInFile(crashlyticsProperties, properties, "")
}
generateResourcesTask.dependsOn generatePropertiesTask
}
我希望在构建时控制构建是否会为我的应用程序创建一个版本。我目前只为特定的 Jenkins 作业启用了 Crashlytics(事实上,如果它不是由我的发布作业构建的,则甚至不会应用该插件),而我的 Jenkins PR 作业同时构建调试和发布。
不幸的是,这似乎仍然会导致 PR 作业的功能分支构建出现在我的应用程序的版本列表中 - 当我尝试过滤最近发布的版本时,这会使搜索栏变得混乱。
我怎样才能做到 没有任何东西 被发送到 crashlytics 服务器?我是否需要隔离 Fabric.with() 调用,以便在禁用 crashlytics 的情况下不使用 运行?与目前相反,它是 运行 和:
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(!enableCrashlytics()).build())
.build();
Fabric.with(this, crashlyticsKit);
够了吗?
注意:我看过这个问题
来自 Fabric 的迈克。
您根本不需要初始化 Fabric。您的初始化代码会阻止 Crashlytics 被初始化,但不会阻止 Answers,因此数据仍会被发送。
或者,将您的构建分开,这样只有生产构建的数据才流入您的生产构建的组织,然后让所有其他构建流入不同组织的同一个应用程序。类似于 this:
// The following code allows an app to report Crashlytics crashes separately
// for release and debug buildTypes when using Gradle. This code should be inserted
// into the specified locations within your build.gradle (Module:app) file
// The buildTypes { } block should be inserted inside the android { } block
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ext.crashlyticsApiSecret = "release api secret"
ext.crashlyticsApiKey = "release api key"
}
debug {
ext.crashlyticsApiSecret = "debug api secret"
ext.crashlyticsApiKey = "debug api key"
}
}
// The following code can be inserted at the bottom of your build.gradle file
import com.crashlytics.tools.utils.PropertiesUtils
File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
android.applicationVariants.all { variant ->
def variantSuffix = variant.name.capitalize()
def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
Properties properties = new Properties()
println "...copying apiSecret for ${variant.name}"
properties.put("apiSecret", variant.buildType.ext.crashlyticsApiSecret)
println "...copying apiKey for ${variant.name}"
properties.put("apiKey", variant.buildType.ext.crashlyticsApiKey)
PropertiesUtils.injectPropertyInFile(crashlyticsProperties, properties, "")
}
generateResourcesTask.dependsOn generatePropertiesTask
}