AS Gradle 7.0+ 使用probuffer

maven: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-gradle-plugin

github: GitHub - google/protobuf-gradle-plugin: Protobuf Plugin for Gradle

随着gradle升级原来使用7.0以下版本集成probuffer时使用

classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8'

implementation 'com.google.protobuf:protobuf-java:3.5.1'

具体7.0+以下如何集成百度可以看到很多,然后升级到7.0+后由于整个配置文件结构修改了,以及grandle版本升级后与classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8' 并不兼容,只能到官网项目中瞅瞅
https://github.com/google/protobuf-gradle-plugin/blob/master/examples/exampleProject/build.gradle

看到插件版本 id('com.google.protobuf') version '0.8.19'

artifact = 'com.google.protobuf:protoc:3.6.1'

implementation 'com.google.protobuf:protobuf-java:3.6.1'

把自己基于7.0+的项目配置文件修改

gradle 插件 7.4.2

gradle version 7.5

project:build.gradle

复制代码
plugins {
    id 'com.android.application' version '7.4.2' apply false
    id 'com.android.library' version '7.4.2' apply false
    id 'com.google.protobuf' version '0.8.19' apply false
}

module: build.gradle

复制代码
plugins {
    id 'com.android.application'
    id 'com.google.protobuf'

//    id('com.google.protobuf') version '0.8.19'

}
protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.6.1' // 也可以配置本地编译器路径
    }

    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.builtins {
                java {}// 生产java源码
            }
        }
    }
}

android {
    namespace 'com.example.myapplication'
    compileSdk 33

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdk 26
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    sourceSets {
        main {
            proto {
                //指定proto文件位置,你的proto文件放置在此文件夹中
                srcDir 'src/main/proto'
            }
        }
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

    implementation 'com.google.protobuf:protobuf-java:3.6.1'

}

配置公用属性:

1.项目根目录创建config.gradle

复制代码
ext {
    ndk = [
            ndkVersion: '23.1.7779620'
    ]
    sdk = [
            compile   : 31,
            min       : 26,
            target    : 31,
            buildTools: '31.0.0'
    ]
    app = [
            versionCode: 1,
            versionName: '1.0'
    ]
   
    deps = [
            appcompat           : 'androidx.appcompat:appcompat:1.4.1',
    ]
}

2.全局应用config.gradle

在项目根目录build.gradle

复制代码
plugins {
    id 'com.android.application' version '7.4.2' apply false
    id 'com.android.library' version '7.4.2' apply false
}
apply from: "config.gradle"

3.module 共同的配置信息common.gradle

复制代码
android {
    compileSdkVersion rootProject.ext.sdk.compile
    defaultConfig {
        minSdkVersion rootProject.ext.sdk.min
        targetSdkVersion rootProject.ext.sdk.target
        versionCode rootProject.ext.app.versionCode
        versionName rootProject.ext.app.versionName

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }

    compileOptions {
        sourceCompatibility rootProject.ext.java.version
        targetCompatibility rootProject.ext.java.version
    }

    /*kotlinOptions {
        jvmTarget = rootProject.ext.java.jvm
    }*/

    buildFeatures {
        dataBinding true
        viewBinding true
    }

    signingConfigs {
        release {
            storeFile file(keystore.storeFile)
            storePassword keystore.storePassword
            keyAlias keystore.keyAlias
            keyPassword keystore.keyPassword
        }
    }

    buildTypes {
        debug {
            buildConfigField "boolean", "isDebug", "true"
            signingConfig signingConfigs.release
        }
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    configurations { implementation.exclude group: 'org.jetbrains', module: 'annotations' }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

    implementation "${rootProject.ext.deps.annotations}"

}

4.module 应用公用配置build.gradle 中加入

复制代码
apply from: "../../common.gradle"
相关推荐
4060ti9 小时前
gradle 入门
java·gradle
BoomHe11 小时前
Android 搭建模块化项目流程及建议
android·架构·gradle
敲代码的剑缘一心1 天前
手把手教你学会写 Gradle 插件
android·gradle
5upport4 天前
Gradle Version Catalog的IDE辅助工具
gradle·android studio·intellij idea
zmm04207 天前
Could not get unknown property ‘mUser‘ for Credentials [username: null]
jenkins·gradle
Digitally9 天前
iTunes 无法备份 iPhone:10 种解决方法
ios·gradle·iphone
QING61812 天前
Gradle 核心配置属性详解 - 新手指南(二)
android·前端·gradle
QING61812 天前
Gradle 核心配置属性详解 - 新手指南(一)
android·前端·gradle
小手WA凉21 天前
Gradle快速入门
java·spring·gradle
亮1111 个月前
GITLAB跑gradle项目 不借助maven-publish直接上传到nexus私人仓库
java·gitlab·gradle·maven