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"
相关推荐
茜茜西西CeCe2 天前
移动技术开发:登录注册界面
java·gitee·gradle·android studio·安卓·移动技术开发·原生安卓开发
技术无疆4 天前
Hutool:Java开发者的瑞士军刀
android·java·开发语言·ide·spring boot·gradle·intellij idea
Yang-Never5 天前
Android Studio -> Android Studio 获取release模式和debug模式的APK
android·gradle·android studio
宋发元5 天前
Gradle和Maven
gradle·maven
帅次6 天前
Android Studio:驱动高效开发的全方位智能平台
android·ide·flutter·kotlin·gradle·android studio·android jetpack
居安思危_Ho7 天前
【Android笔记】Android Studio打包 提示Invalid keystore format
android·笔记·gradle·android studio·android 打包
舒一笑13 天前
gradle和maven相比有什么相同点和区别?
java·gradle·maven
不想迷路的小男孩16 天前
android 15升级适配无法安装运行,并且提示应用未安装
android·开发语言·python·gradle
命运之手1 个月前
【Android】Android AOP 编程框架
android·kotlin·gradle·aop·aspectj
命运之手1 个月前
【Gradle】Gradle指定JDK位置,JVM参数,网络代理配置
android·gradle·proxy·网络代理·properties