Android Studio 配置 proto

环境

Android Studio Koala | 2024.1.1

distributionUrl=https://services.gradle.org/distributions/gradle-8.7-bin.zip

  • 下载protobuf相关plugin

  • protobuf配置

java 复制代码
<!-- /gradle/libs.versions.toml -->

[versions]
agp = "8.5.0"
junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
appcompat = "1.7.0"
material = "1.12.0"
proto = "0.9.3"

[libraries]
appcompat_appcompat-x-0-0 = { module = "androidx.appcompat_appcompat:1.0.0" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
google-protobuf = { id = "com.google.protobuf", version.ref = "proto" }
java 复制代码
<!-- /***Module/build.gradle -->

plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.google.protobuf)
}

android {
    namespace 'com.android.settings.intelligence'
    compileSdk 34

    defaultConfig {
        minSdk 30

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

    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 {
                srcDir 'src/main/proto'
            }
        }
    }
}

dependencies {
    implementation libs.appcompat
    implementation libs.material
    implementation 'com.google.protobuf:protobuf-java:3.22.3'
    api 'androidx.legacy:legacy-support-v4:1.0.0'
    api 'androidx.preference:preference:1.2.1'
    api 'androidx.cardview:cardview:1.0.0'
    api 'androidx.recyclerview:recyclerview:1.3.2'
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.19.2'
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.builtins {
                java {}// 生产java源码
            }
        }
    }
}
java 复制代码
<!-- /src/main/proto/settings_intelligence_log.proto -->

syntax = "proto2";

option java_outer_classname = "SettingsIntelligenceLogProto";

package com.android.settings.intelligence;

// Wrapper for SettingsIntelligence event.
// Next index: 3
message SettingsIntelligenceEvent {

    // Event type for this log.
    enum EventType {
        // Do not use
        UNUSED = 0;

        // Gets suggestion list
        GET_SUGGESTION = 1;

        // Dismisses a suggestion
        DISMISS_SUGGESTION = 2;

        // Launches a suggestion
        LAUNCH_SUGGESTION = 3;

        // Opens search page
        OPEN_SEARCH_PAGE = 4;

        // Leaves search page
        LEAVE_SEARCH_PAGE = 5;

        // User sends a query to settings search
        PERFORM_SEARCH = 6;

        // Clicks a search result
        CLICK_SEARCH_RESULT = 7;

        // Clicks a saved query
        CLICK_SAVED_QUERY = 8;

        // Search service indexes database
        INDEX_SEARCH = 9;

        // Displays the no result image in search
        SHOW_SEARCH_NO_RESULT = 10;

        // Displays some result in search
        SHOW_SEARCH_RESULT = 11;

        // Leaves search page without entering any query
        LEAVE_SEARCH_WITHOUT_QUERY = 12;

        // Queries search data during a search session
        SEARCH_QUERY_DATABASE = 13;

        // Queries installed app list during a search session
        SEARCH_QUERY_INSTALLED_APPS = 14;

        // Queries input device list (keyboards, game controller etc) during
        // a search session
        SEARCH_QUERY_INPUT_DEVICES = 15;

        // Queries accessiblity service list during a search session
        SEARCH_QUERY_ACCESSIBILITY_SERVICES = 16;
    }

    message SearchResultMetadata {
        // The id of the search result row in this event, this is an internally
        // generated key and does not associate with any user data.
        optional string search_result_key = 1;

        // The rank of the search result row in this event.
        optional int32 search_result_rank = 2;

        // The number of results in this query.
        optional int32 result_count = 3;

        // The length of query word.
        optional int32 search_query_length = 4;
    }

    // The type of suggestion event.
    optional EventType event_type = 1;

    // The name/id of the suggestion in this event.
    repeated string suggestion_ids = 2;

    // Data about search results in this event.
    optional SearchResultMetadata search_result_metadata = 3;

    // Latency for the current event.
    optional int64 latency_millis = 4;
}
  • 同步重新构建后生成的目录

Settings\SettingsIntelligence\build\generated\source\proto\debug\java\com\android\settings\intelligence\SettingsIntelligenceLogProto.java

详细代码可参考 https://github.com/Shigq-droid/Settings_Android13/tree/master/SettingsIntelligence.

相关推荐
小程故事多_806 小时前
从 Tokenizer 到 Next Token,穿透数据流,完整理解 Transformer 底层逻辑
android·深度学习·transformer
三少爷的鞋9 小时前
Android 协程实践:为什么不应将 `supervisorScope` 作为常规方案
android
承渊政道10 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(从ChatGLM本地化到LoRA、PEFT的高级微调)
android·人工智能·pytorch·chatglm·本地化部署·大模型开发与微调
2601_9628857212 小时前
如何用 Python 判断一只股票“追涨”还是“抄底”更有效?
android·开发语言·python
素师良码12 小时前
第10篇:屏ESD Check内核逻辑驱动代码完整拆解
android
高晶12 小时前
Android 短信收发模块从零到实战:权限配置、界面设计、发送接收与兼容性适配全攻略
android·程序员
随遇丿而安12 小时前
第18周:ViewModel 基础功能 + 架构优化
android
哎写bug的程序员13 小时前
关于VSCode上gcc,gdb的安装配置问题
ide·vscode·编辑器
问心无愧051315 小时前
[GXYCTF2019]Ping Ping Ping
android·笔记
事圆则缓15 小时前
Kotlin 异步与并发:从一次搜索请求走到状态流
android·开发语言·kotlin