1

Gradle がビルドの進行を開始する前に、別のアプリケーション (exe) を実行したいだけです。私の目標は、UI に表示するビルド番号を含む依存ファイルを exe (既に作成済み) に自動生成させることです。上記はすべて簡単ですが、Gradle についてはほとんど何も知りません。

この質問は尋ねられましたが、回答はGradleタスクを使用したGradleの簡潔なスニペットであり、あまり説明していません.

異なるプロジェクトで同じ exe を使用したいので、auto-gen ファイルの場所を指定するコマンド引数が必要です。

"buildnum.exe /someworkspace/someproject/somefolder/version.java"

これを実行するにはどうすればよいですか?典型的な build.gradle スクリプトを使用しています。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
4

3 に答える 3

3

Gradle に慣れていない人 (私のように) のために、下部に私のモジュールの完全な build.gradle スクリプトがあるので、ツールがどこにどのように統合されているかを確認できます。Exec コマンドは、build.grade ファイルと同じフォルダーで exe を実行するため、ツールとソースへの相対パスを使用します。

これは、モジュールの BuildNum を含むモジュール内のソース ファイルである VersionUtils.java です。

package ca.mmist;

public class VersionUtils
{
    public static final int nSkyUtilsCRC = 1078887142;
    public static final int nSkyUtilsBuild = 228;
}

私が本当に望んでいたのは、ビルドが必要な依存関係が変更された場合にのみ BuildNum が増加するようにすることでした。そのため、BuildNum.exe を変更して VersionUtils.java 内の「src」フォルダーを見つけ、各サブフォルダーを再帰的にスキャンして.java を探します。.xml; .jar; .lib を開き、各ソース ファイルの FileWriteTime と FileSize を使用して CRC32 を生成します。そのため、BuildNo をインクリメントするために VersionUtils.java を (最初に VersionUtils.~java に) 書き直すと、CRC を比較し、それらが同じである場合は、単純に一時ファイルを破棄できます。そうしないと、ファイルを交換 (削除して名前を変更) し、新しい BuildNo でモジュールを再構築します。(1 時間でコーディングするよりも苦痛に思えます。)

いずれにせよ、今では QA は、マニフェストのバージョン タグを人間が変更することを忘れずに、出荷されたソフトウェアのビルドを正確に検証できることを嬉しく思います。

apply plugin: 'com.android.library'

android {
    compileSdkVersion 16
    buildToolsVersion "19.1.0"

    task buildNum(type: Exec, description: 'BuildNum.exe') {
        commandLine '../../../Tools/Bin/buildnum.exe', 'src/main/java/ca/mmist/VersionUtils.java'
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn buildNum
    }

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 16
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.+'
    compile files('libs/maplink.jar')
}
于 2015-05-27T16:25:51.233 に答える