Fastlane gradle命令 - 属性未传递

9

我创建了一个 fastlane 任务,用于上传到 Play Store,具体如下:

  lane :DEPLOY_BETA do

  gradle(task: "clean")

  version_codes = google_play_track_version_codes(
      package_name: "",
      json_key: "play_store_service_account_key.json",
  )

  gradle(
    task: "assemble",
    flavor: "World",
    build_type: "Release",
    properties: { "versionCode" => 100 }
  )

  apk_path = Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
  supply(
    apk: apk_path,
    json_key: "play_store_service_account_key.json",
    package_name: "",
    track: "beta",
    skip_upload_metadata: true,
    validate_only: true,
    skip_upload_images: true,
    skip_upload_screenshots: true
    )

  end

问题在于属性versionCode没有覆盖风格(也不是defaultConfig)中指定的versionCode。这是fastlane的一个错误吗?如果我根本不在build.gradle中设置versionCode,则它不会添加versionCode,并且fastlane supply将失败。
有人可以帮助我吗?
4个回答

12

我曾遇到同样的问题。你需要在build.gradle文件中使用它们,像这样:

versionCode project.hasProperty('versionCode') ? project.property('versionCode') as int : 1 versionName project.hasProperty('versionName') ? project.property('versionName') : "没有版本号"

我在原始拉取请求此评论中发现了相关信息。看起来gradle不会直接暴露这些信息,我们需要手动分配它们(根据此评论)。


1

仅为确认此行为,似乎您必须像@sebleclerc所说的那样在build.gradle中定义versionName和/或versionCode。

# android/app/build.gradle
android {
    ....
    defaultConfig {
        // Fastlane will handle version
        versionName project.hasProperty('versionName') ? project.property('versionName') : "0.0.0"
        versionCode 0
    }
    ....
}

# android/fastlane/Fastfile
platform :android do
  lane :dev do
    code = google_play_track_version_codes(package_name: "my.package.name")
    code_incremented = code[0] + 1
    increment_version_code(
      gradle_file_path: "app/build.gradle", version_code: code_incremented
    )
    gradle(
      task: "clean assemble",
      flavor: "Development",
      build_type: "Release",
      properties: {
        "versionName" => ENV['APP_VERSION'],
      }
    )
    upload_to_play_store(
      package_name: "my.package.name",
    )
  end
end

0

虽然这是一个老问题,但今天我遇到了同样的问题,并发现新的Gradle版本引起了这个问题。

版本7.3.0及更高版本存在此问题。 您可以通过使用低于此版本的版本来解决此问题,例如在我的项目的build.gradle中使用classpath 'com.android.tools.build:gradle:7.1.3'

完成后,您可以使用以下内容:

gradle(
   task: 'assemble',
   build_type: 'Release',
   flags: "--warning-mode none -x lint",
   properties: {
       "android.injected.version.code" => versionCode,
       "android.injected.version.name" => versionName,
   }
)

希望这能帮助到某个人!

0

我使用最新的gradle wrapper 7.5和gradle版本7.4.2成功解决了我的项目中相同的问题。我尝试了以下解决方法:

  1. 在我的build.gradle文件中,我将默认配置更改为从gradle.properties文件中读取:
defaultConfig {
        ......
        versionCode = rootProject.ext.get("versionCode").toString().toInt()
        versionName = rootProject.ext.get("versionName").toString()
        ......
}

在我的 gradle.properties 文件中(位于根目录下),我定义了这两个属性的默认值:
versionCode=1
versionName=debug
  1. 然后使用标志运行汇编/捆绑命令来修改这些属性,将生成具有所需值(2、测试)的apk/aab:
 ./gradlew assembleMobileAlphaDebug -PversionCode=2 -PversionName=test

请注意,我在所有地方都使用了versionCode和versionName作为属性名称,属性名称应该匹配。

降级Gradle对我来说不是解决方法。 - BhatR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接