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"
相关推荐
yacolex2 天前
Mac安装使用Gradle
spring·macos·gradle
hweiyu003 天前
用 Gradle 实现自动化测试:集成 JUnit、TestNG,生成测试报告
junit·gradle
hweiyu004 天前
Spring Boot 项目集成 Gradle:构建、测试、打包全流程教程
java·spring boot·后端·gradle
TeleostNaCl12 天前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea
leobertlan20 天前
好玩系列:脚本和插件使我快乐
前端·程序员·gradle
芦半山23 天前
快速应用「幽灵调用」的正式修复
android·gradle
猿小蔡1 个月前
Gradle 中 Maven 仓库配置
gradle
前行的小黑炭1 个月前
Android 不同构建模式下使用不同类的例子:如何在debug模式和release模式,让其使用不同的类呢?
android·kotlin·gradle
针叶2 个月前
解决Android Studio查找aar源码的错误
android·gradle·android studio
大王派来巡山的小旋风2 个月前
组件化打包的时候,子模块是 Libary库模块中libs包含aar的时候遇到的问题
kotlin·gradle