рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓

Android 10 рдореЗрдВ, рд╕реНрдЯреЗрдмрд▓ Android рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбреЗрдлрд╝рд┐рдирд┐рд╢рди рд▓реИрдВрдЧреНрд╡реЗрдЬ (рдПрдЖрдИрдбреАрдПрд▓) рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ. рдпрд╣ рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЬрд╝рд░рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдПрдкреАрдЖрдИ) рдФрд░ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╛рдЗрдирд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдПрдмреАрдЖрдИ) рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХрд╛ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИ. рд╕реНрдЯреЗрдмрд▓ AIDL, AIDL рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЗрд╕ рдкрд░ рдХреБрдЫ рдкрд╛рдмрдВрджрд┐рдпрд╛рдВ рднреА рд╣реЛрддреА рд╣реИрдВ:

  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕, aidl_interfaces рдХреА рдорджрдж рд╕реЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рддрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ.
  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рд┐рд░реНрдлрд╝ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ. рдкрд╕рдВрдж рдХрд┐рдП рдЧрдП рдЯрд╛рдЗрдк рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕рд▓ рдЕрдкрдиреЗ-рдЖрдк рдмрди рдЬрд╛рддреЗ рд╣реИрдВ. рдпреЗ рдкрд╛рд░реНрд╕рд▓, AIDL рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирддреЗ рд╣реИрдВ. рд╕рд╛рде рд╣реА, рдпреЗ рдЕрдкрдиреЗ-рдЖрдк рдорд╛рд░реНрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдирдорд╛рд░реНрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ.
  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдЯреЗрдмрд▓ (рдкреБрд░рд╛рдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛) рдХреЗ рддреМрд░ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдРрд╕рд╛ рд╣реЛрдиреЗ рдкрд░, рдЙрдирдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдореМрдЬреВрдж рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдПрдЖрдИрдбреАрдПрд▓ рдмрдирд╛рдо рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓

рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдПрдЖрдИрдбреАрдПрд▓ рдХрд╛ рдорддрд▓рдм, рд╕рд┐рд░реНрдлрд╝ рдПрдЖрдИрдбреАрдПрд▓ рдореЗрдВ рддрдп рдХрд┐рдП рдЧрдП рдЯрд╛рдЗрдк рд╕реЗ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрд▓рд╛рди (рдХрд╕реНрдЯрдо рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ) рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб AIDL рдирд╣реАрдВ рд╣реИ. рдПрдЖрдИрдбреАрдПрд▓ рдореЗрдВ рддрдп рдХрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕рд▓ рдХреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдкрд╛рд░реНрд╕рд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ.

рд╕реНрдЯреЗрдмрд▓ AIDL рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб AIDL рдЬрд╝рд░реВрд░реА рд╣реИ, рддрд╛рдХрд┐ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣ рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡, рдкреБрд░рд╛рдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реЛрддреЗ. рд╕реНрдерд┐рд░ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рд┐рд░реНрдлрд╝ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЯрд╛рдЗрдк рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП. рд╕рд╛рде рд╣реА, рдЙрд╕реЗ рд╡рд░реНрд╢рдирд┐рдВрдЧ рдХреА рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП. рдЗрд╕рдХреЗ рдЙрд▓рдЯ, рдЕрдЧрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ unstable:true рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛.

рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдп рдХрд░рдирд╛

aidl_interface рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

aidl_interface {
    name: "my-aidl",
    srcs: ["srcs/aidl/**/*.aidl"],
    local_include_dir: "srcs/aidl",
    imports: ["other-aidl"],
    versions_with_info: [
        {
            version: "1",
            imports: ["other-aidl-V1"],
        },
        {
            version: "2",
            imports: ["other-aidl-V3"],
        }
    ],
    stability: "vintf",
    backend: {
        java: {
            enabled: true,
            platform_apis: true,
        },
        cpp: {
            enabled: true,
        },
        ndk: {
            enabled: true,
        },
        rust: {
            enabled: true,
        },
    },

}
  • name: рдпрд╣ рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рд╣реИ. рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЦрд╛рд╕ рдкрд╣рдЪрд╛рди рд╣реЛрддреА рд╣реИ.
  • srcs: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рдПрдЖрдИрдбреАрдПрд▓ рд╕реЛрд░реНрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА. рдкреИрдХреЗрдЬ com.acme рдореЗрдВ рддрдп рдХрд┐рдП рдЧрдП рдПрдЖрдИрдбреАрдПрд▓ рдЯрд╛рдЗрдк Foo рдХрд╛ рдкрд╛рде <base_path>/com/acme/Foo.aidl рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рдпрд╣рд╛рдВ <base_path>, рдЙрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рд╕реЗ рдЬреБрдбрд╝реА рдХреЛрдИ рднреА рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ Android.bp рдореМрдЬреВрдж рд╣реИ. рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, <base_path> srcs/aidl рд╣реИ.
  • local_include_dir: рд╡рд╣ рдкрд╛рде рдЬрд╣рд╛рдВ рд╕реЗ рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ. рдпрд╣ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП <base_path> рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ.
  • imports: aidl_interface рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА, рдЬрд┐рдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рдХрд░рддрд╛ рд╣реИ. рдЕрдЧрд░ рдЖрдкрдХреЗ рдХрд┐рд╕реА AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ, рдХрд┐рд╕реА рджреВрд╕рд░реЗ aidl_interface рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдкрд╛рд░реНрд╕рд▓реЗрдмрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдирд╛рдо рдпрд╣рд╛рдВ рдбрд╛рд▓реЗрдВ. рдпрд╣ рдирд╛рдо, рд╕рдмрд╕реЗ рдирдП рд╡рд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рдЦрд╛рд╕ рд╡рд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдирд╛рдо рдХреЗ рд╕рд╛рде рд╡рд░реНрд╢рди рд╕рдлрд╝рд┐рдХреНрд╕ (рдЬреИрд╕реЗ, -V1) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. Android 12 рд╕реЗ, рд╡рд░реНрд╢рди рддрдп рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ
  • versions: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди, api_dir рдореЗрдВ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ. Android 11 рд╕реЗ, versions рдХреЛ aidl_api/name рдореЗрдВ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЕрдЧрд░ рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдлрд╝реНрд░реЛрдЬрд╝рди рд╡рд░реНрд╢рди рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП. рд╕рд╛рде рд╣реА, рдпрд╣ рднреА рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреБрд░рд╛рдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ Android 13 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд░реНрд╢рди рдХреЗ рд▓рд┐рдП, versions_with_info рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.
  • versions_with_info: рдЯрдкрд▓ рдХреА рд╕реВрдЪреА. рдЗрдирдореЗрдВ рд╕реЗ рд╣рд░ рдЯрдкрд▓ рдореЗрдВ, рдлрд╝реНрд░реЛрдЬрд╝рди рд╡рд░реНрд╢рди рдХрд╛ рдирд╛рдо рдФрд░ aidl_interface рдХреЗ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд░реНрд╢рди рдЗрдВрдкреЛрд░реНрдЯ рдХреА рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ. рдпрд╣ рд╕реВрдЪреА рдЙрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд░реНрд╢рди рдЗрдВрдкреЛрд░реНрдЯ рдХреА рд╣реЛрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ aidl_interface рдХреЗ рдЗрд╕ рд╡рд░реНрд╢рди рдиреЗ рдЗрдВрдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рд╣реИ. рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IFACE рдХреЗ рд╡рд░реНрд╢рди V рдХреА рдкрд░рд┐рднрд╛рд╖рд╛, aidl_api/IFACE/V рдкрд░ рдореМрдЬреВрдж рд╣реИ. рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ Android 13 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛. рдЗрд╕реЗ рд╕реАрдзреЗ рддреМрд░ рдкрд░ Android.bp рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП. рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ *-update-api рдпрд╛ *-freeze-api рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЬреЛрдбрд╝рд╛ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ *-update-api рдпрд╛ *-freeze-api рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ, рддреЛ versions рдлрд╝реАрд▓реНрдб рдЕрдкрдиреЗ-рдЖрдк versions_with_info рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ.
  • stability: рдпрд╣ рдлрд╝реНрд▓реИрдЧ, рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕реНрдЯреЗрдмрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдлрд╝реНрд▓реИрдЧ рд╕реЗрдЯ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдпрд╣ рд╕рд┐рд░реНрдлрд╝ "vintf" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ. рдЕрдЧрд░ stability рдХреЛ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреБрд░рд╛рдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рддрдм рддрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рддрдХ unstable рдХреЛ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛. рдЕрдирд╕реЗрдЯ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдХрдВрдкрд╛рдЗрд▓реЗрд╢рди рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреЗрдмрд▓ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдпрд╛ рддреЛ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рднреА рдЪреАрдЬрд╝реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ system.img рдФрд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдкрд╛рд░реНрдЯреАрд╢рди рдореЗрдВ рдореМрдЬреВрдж рдЪреАрдЬрд╝реЗрдВ рдпрд╛ рд╡реЗрдВрдбрд░ рдХреА рд╕рднреА рдЪреАрдЬрд╝реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ vendor.img рдФрд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдкрд╛рд░реНрдЯреАрд╢рди рдореЗрдВ рдореМрдЬреВрдж рдЪреАрдЬрд╝реЗрдВ. рдЕрдЧрд░ stability рдХреЛ "vintf" рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдерд┐рд░ рд░рдЦрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдЙрд╕реЗ рд╕реНрдерд┐рд░ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛.
  • gen_trace: рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╝реНрд▓реИрдЧ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛ рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. Android 14 рд╕реЗ, cpp рдФрд░ java рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП, true рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ.
  • host_supported: рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝реНрд▓реИрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдЗрд╕реЗ true рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ, рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛрд╕реНрдЯ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ.
  • unstable: рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝реНрд▓реИрдЧ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рдорд╛рд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдЯреЗрдмрд▓ рд╣реЛрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ. рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ true рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдкрд░, рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рди рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдбрдВрдк рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдЙрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ.
  • frozen: рдпрд╣ рдПрдХ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдЗрд╕реЗ true рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХреЗ рдмрд╛рдж рд╕реЗ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ. рдЗрд╕рд╕реЗ, рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдХреА рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдВрдЪреЗрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ. false рдкрд░ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЛрдб рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирдП рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЧрдП рд╣реИрдВ. рдЗрд╕рд▓рд┐рдП, foo-freeze-api рдЪрд▓рд╛рдиреЗ рдкрд░ рдПрдХ рдирдпрд╛ рд╡рд░реНрд╢рди рдЬрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡реИрд▓реНрдпреВ рдЕрдкрдиреЗ-рдЖрдк true рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ. Android 14 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛.
  • backend.<type>.enabled: рдпреЗ рдлрд╝реНрд▓реИрдЧ, рд╣рд░ рдЙрд╕ рдмреИрдХрдПрдВрдб рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдЖрдИрдбреАрдПрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ. рдЪрд╛рд░ рдмреИрдХрдПрдВрдб рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: Java, C++, NDK, рдФрд░ Rust. Java, C++, рдФрд░ NDK рдмреИрдХрдПрдВрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛрддреЗ рд╣реИрдВ. рдЕрдЧрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдмреИрдХрдПрдВрдб рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛. Android 15 рддрдХ, Rust рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ.
  • backend.<type>.apex_available: рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз APEX рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА.
  • backend.[cpp|java].gen_log: рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝реНрд▓реИрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдпрд╣ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓реЗрди-рджреЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ.
  • backend.[cpp|java].vndk.enabled: рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╝реНрд▓реИрдЧ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡реАрдПрдирдбреАрдХреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ false рд╣реИ.
  • backend.[cpp|ndk].additional_shared_libraries: Android 14 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдлрд╝реНрд▓реИрдЧ, рдиреЗрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ. рдпрд╣ рдлрд╝реНрд▓реИрдЧ, ndk_header рдФрд░ cpp_header рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ.
  • backend.java.sdk_version: рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝реНрд▓реИрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, SDK рдЯреВрд▓ рдХреЗ рдЙрд╕ рд╡рд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ Java рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ рдЧрдИ рд╣реИ. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ "system_current" рд╣реИ. backend.java.platform_apis рдХреЗ true рд╣реЛрдиреЗ рдкрд░, рдЗрд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП.
  • backend.java.platform_apis: рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╝реНрд▓реИрдЧ рд╣реИ. рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрд╕рдбреАрдХреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рдПрдкреАрдЖрдИ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛ, рддреЛ рдЗрд╕реЗ true рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП.

рд╡рд░реНрд╢рди рдФрд░ рдЪрд╛рд▓реВ рдХрд┐рдП рдЧрдП рдмреИрдХрдПрдВрдб рдХреЗ рд╣рд░ рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ. рдХрд┐рд╕реА рдЦрд╛рд╕ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХрд┐рд╕реА рдЦрд╛рд╕ рд╡рд░реНрд╢рди рдХреЛ рд░реЗрдлрд╝рд░ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рд░рдЦрдиреЗ рдХреЗ рдирд┐рдпрдо рджреЗрдЦреЗрдВ.

AIDL рдлрд╝рд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦрдирд╛

рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рддрд░рд╣ рд╣реА рд╣реЛрддреЗ рд╣реИрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдирдореЗрдВ рдмрд┐рдирд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕рд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрддреА. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╕реНрдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реЛрддреЗ! рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдмрдирд╛рдо рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рджреЗрдЦреЗрдВ. рд╕реНрдерд┐рд░ рдПрдЖрдИрдбреАрдПрд▓ рдореЗрдВ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдкрд╣рд▓реЗ, рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝реЙрд░рд╡рд░реНрдб рдбрд┐рдХреНрд▓реЗрдпрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛. рд╕реНрдЯреЗрдмрд▓ (рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб) AIDL рдореЗрдВ, рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлрд╝реАрд▓реНрдб рдФрд░ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

// in a file like 'some/package/Thing.aidl'
package some.package;

parcelable SubThing {
    String a = "foo";
    int b;
}

boolean, char, float, double, byte, int, long, рдФрд░ String рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. Android 12 рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рддрдп рдХрд┐рдП рдЧрдП рдЗрдиреНрдпреВрдорд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рддрдп рди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░, 0 рдЬреИрд╕реА рдпрд╛ рдЦрд╛рд▓реА рд╡реИрд▓реНрдпреВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рдХреЗ рдмрд┐рдирд╛ рд╡рд╛рд▓реЗ рдПрдиреНрдпреВрдорд░реЗрд╢рди, 0 рдкрд░ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ. рднрд▓реЗ рд╣реА, рдХреЛрдИ рдЬрд╝реАрд░реЛ рдПрдиреНрдпреВрдорд░реЗрд╢рди рди рд╣реЛ.

рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛

рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЗ рддреМрд░ рдкрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдпрд╣рд╛рдВ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ. Android.mk рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд▓реЗрдЧрд╕реА рдореЙрдбреНрдпреВрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдзреНрдпрд╛рди рджреЗрдВ, рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╡рд░реНрд╢рди рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЕрд╕реНрдерд┐рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд░реНрд╢рди рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ. рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд░реНрд╢рди рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

cc_... {
    name: ...,
    // use `shared_libs:` to load your library and its transitive dependencies
    // dynamically
    shared_libs: ["my-module-name-cpp"],
    // use `static_libs:` to include the library in this binary and drop
    // transitive dependencies
    static_libs: ["my-module-name-cpp"],
    ...
}
# or
java_... {
    name: ...,
    // use `static_libs:` to add all jars and classes to this jar
    static_libs: ["my-module-name-java"],
    // use `libs:` to make these classes available during build time, but
    // not add them to the jar, in case the classes are already present on the
    // boot classpath (such as if it's in framework.jar) or another jar.
    libs: ["my-module-name-java"],
    // use `srcs:` with `-java-sources` if you want to add classes in this
    // library jar directly, but you get transitive dependencies from
    // somewhere else, such as the boot classpath or another jar.
    srcs: ["my-module-name-java-source", ...],
    ...
}
# or
rust_... {
    name: ...,
    rustlibs: ["my-module-name-rust"],
    ...
}

C++ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг:

#include "some/package/IFoo.h"
#include "some/package/Thing.h"
...
    // use just like traditional AIDL

Java рдореЗрдВ рдЙрджрд╛рд╣рд░рдг:

import some.package.IFoo;
import some.package.Thing;
...
    // use just like traditional AIDL

Rust рдореЗрдВ рдЙрджрд╛рд╣рд░рдг:

use aidl_interface_name::aidl::some::package::{IFoo, Thing};
...
    // use just like traditional AIDL

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд░реНрд╢рди

foo рдирд╛рдо рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдбрд┐рдХреНрд▓реЗрдпрд░ рдХрд░рдиреЗ рд╕реЗ, рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдЯрд╛рд░рдЧреЗрдЯ рднреА рдмрдирддрд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдореИрдиреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдмрд┐рд▓реНрдб рдХрд░рдиреЗ рдкрд░, foo-freeze-api, Android рд╡рд░реНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ api_dir рдпрд╛ aidl_api/name рдореЗрдВ рдПрдХ рдирдИ рдПрдкреАрдЖрдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдПрдХ .hash рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИ. рдпреЗ рджреЛрдиреЛрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирдП рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ. foo-freeze-api, versions_with_info рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрд╢рди рдФрд░ рд╡рд░реНрд╢рди рдХреЗ рд▓рд┐рдП imports рджрд┐рдЦ рд╕рдХреЗ. рдЕрд╕рд▓ рдореЗрдВ, versions_with_info рдореЗрдВ рдореМрдЬреВрдж imports рдХреЛ imports рдлрд╝реАрд▓реНрдб рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдВрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП versions_with_info рдореЗрдВ versions_with_info рдореЗрдВ рдореМрдЬреВрдж рд╕рдмрд╕реЗ рдирдП рд╕реНрдЯреЗрдмрд▓ рд╡рд░реНрд╢рди рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ. рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд░реНрд╢рди рдирд╣реАрдВ рд╣реИ.imports versions_with_info рдкреНрд░реЙрдкрд░реНрдЯреА рддрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдлрд╝реНрд░реЛрдЬрд╝рди рд╡рд░реНрд╢рди рдФрд░ рдЯреЙрдк рдСрдлрд╝ рдЯреНрд░реА (рдЯреАрдУрдЯреА) рдХреЗ рдмреАрдЪ рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдпрд╣ рдЯреАрдУрдЯреА рдФрд░ рдлрд╝реНрд░реЛрдЬрд╝рди рд╡рд░реНрд╢рди рдХреЗ рдмреАрдЪ рднреА рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ.

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ ToT рд╡рд░реНрд╢рди рдХреА рдПрдкреАрдЖрдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рдЬрдм рднреА рдХреЛрдИ рдПрдкреАрдЖрдИ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм foo-update-api рдХреЛ рдЪрд▓рд╛рдХрд░ aidl_api/name/current рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ. рдЗрд╕рдореЗрдВ ToT рд╡рд░реНрд╢рди рдХреА рдПрдкреАрдЖрдИ рдкрд░рд┐рднрд╛рд╖рд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ.

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рд▓рд┐рдХ рдпреЗ рдирдИ рдЪреАрдЬрд╝реЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЖрдЦрд┐рд░ рдореЗрдВ рдореМрдЬреВрдж рддрд░реАрдХреЗ (рдпрд╛ рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рддрдп рдХреА рдЧрдИ рдирдИ рд╕реАрд░реАрдЬрд╝ рд╡рд╛рд▓реЗ рддрд░реАрдХреЗ)
  • рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдЦрд┐рд░ рдореЗрдВ рдореМрдЬреВрдж рдПрд▓рд┐рдореЗрдВрдЯ (рд╣рд░ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рдЬреЛрдбрд╝рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ)
  • рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рд╡реИрд▓реНрдпреВ
  • Android 11 рдореЗрдВ, рдПрдиреНрдпреВрдорд░реЗрдЯрд░
  • Android 12 рдореЗрдВ, рдпреВрдирд┐рдпрди рдХреЗ рдЖрдЦрд┐рд░ рдореЗрдВ рдлрд╝реАрд▓реНрдб

рдХреЛрдИ рдЕрдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ. рд╕рд╛рде рд╣реА, рдХреЛрдИ рдФрд░ рд╡реНрдпрдХреНрддрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛. рдРрд╕рд╛ рди рдХрд░рдиреЗ рдкрд░, рдорд╛рд▓рд┐рдХ рдХреЗ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдЯрдХрд░рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.

рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝реНрд░реАрдЬрд╝ рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрди рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • AIDL_FROZEN_REL=true m ... - рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдлрд╝реНрд░реАрдЬрд╝ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ. рдЗрдирдореЗрдВ рд╡реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ owner: рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИ.
  • AIDL_FROZEN_OWNERS="aosp test" - рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдлрд╝реНрд░реАрдЬрд╝ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ. рд╕рд╛рде рд╣реА, owner: рдлрд╝реАрд▓реНрдб рдХреЛ "aosp" рдпрд╛ "test" рдХреЗ рддреМрд░ рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ.

рдЗрдВрдкреЛрд░реНрдЯ рдХреА рд╕реНрдерд┐рд░рддрд╛

рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдЗрдВрдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛, рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рд▓реЗрдпрд░ рдкрд░ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рд╕рднреА рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ. рд╕рд╛рде рд╣реА, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрд╢рди рдХреЗ рдЯрд╛рдЗрдк рдХреЛ рдПрдХ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдкрд░, рдХреБрдЫ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ. рдЖрдо рддреМрд░ рдкрд░, рд╕рд┐рд░реНрдлрд╝ рдЯрд╛рдЗрдк рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдИрдкреАрд╕реА рд▓реЗрди-рджреЗрди рд╕реЗ рдорд┐рд▓реЗ рдЕрдирдЬрд╛рдиреЗ рдЯрд╛рдЗрдк рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП.

Android рдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рдХреЛрдб рдореЗрдВ android.hardware.graphics.common, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд░реНрд╢рди рдЕрдкрдЧреНрд░реЗрдб рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ.

рд╡рд░реНрд╢рди рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд░реАрдХреЗ

рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди, рдЬрдм рдкреБрд░рд╛рдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдирдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдмреИрдХрдПрдВрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрдбрд╝рдмрдбрд╝реА рдпрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ.

  • cpp рдмреИрдХрдПрдВрдб рдХреЛ ::android::UNKNOWN_TRANSACTION рдорд┐рд▓рддрд╛ рд╣реИ.
  • ndk рдмреИрдХрдПрдВрдб рдХреЛ STATUS_UNKNOWN_TRANSACTION рдорд┐рд▓рддрд╛ рд╣реИ.
  • java рдмреИрдХрдПрдВрдб рдХреЛ android.os.RemoteException рдорд┐рд▓рддрд╛ рд╣реИ. рдЗрд╕рдореЗрдВ рдпрд╣ рдореИрд╕реЗрдЬ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.

рдЗрд╕реЗ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрд░рдирд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ

рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирдП рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░, рдкреБрд░рд╛рдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ. рдЬрдм рдирдП рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрд░рд╛рдиреЗ рдкрд╛рд░реНрд╕рд▓ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рдирдП рдлрд╝реАрд▓реНрдб рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рдЕрдкрдиреЗ-рдЖрдк рднрд░ рдЬрд╛рддреА рд╣реИрдВ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдирдП рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рддрдп рдХрд░рдиреА рд╣реЛрдЧреА.

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╣ рдирдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдЧрд╛. рдРрд╕рд╛ рддрдм рддрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдкрддрд╛ рди рд╣реЛ рдХрд┐ рд╕рд░реНрд╡рд░, рдлрд╝реАрд▓реНрдб рдХреЛ рддрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрд░рдирд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

рдПрдирдо рдФрд░ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ

рдЗрд╕реА рддрд░рд╣, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдРрд╕реА рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рд╡реИрд▓реНрдпреВ рдФрд░ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╡реЗ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдкрд╛рддреЗ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдореЗрдВ рдФрд░ рд╡реИрд▓реНрдпреВ рдЬреЛрдбрд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдРрд╕рд╛ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рд╕рд░реНрд╡рд░ рдХреЛ рдпрд╛ рддреЛ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛.

рдпреВрдирд┐рдпрди

рдЕрдЧрд░ рдкрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдирдП рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдирдП рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдпрди рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдкрд░ рдЧрдбрд╝рдмрдбрд╝реА рд╣реЛрддреА рд╣реИ. рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдирдП рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдпрди рдХрднреА рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛. рдЕрдЧрд░ рдпрд╣ рдПрдХрддрд░рдлрд╝рд╛ рд▓реЗрди-рджреЗрди рд╣реИ, рддреЛ рдЧрдбрд╝рдмрдбрд╝реА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЧрдбрд╝рдмрдбрд╝реА BAD_VALUE(C++ рдпрд╛ NDK рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП) рдпрд╛ IllegalArgumentException(Java рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП) рд╣реЛрддреА рд╣реИ. рдпрд╣ рдЧрдбрд╝рдмрдбрд╝реА рддрдм рджрд┐рдЦрддреА рд╣реИ, рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ, рдирдП рдлрд╝реАрд▓реНрдб рдкрд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдпреВрдирд┐рдпрди рдХреЛ рдХрд┐рд╕реА рдкреБрд░рд╛рдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬ рд░рд╣рд╛ рд╣реЛ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддрдм рднреА рджрд┐рдЦрддреА рд╣реИ, рдЬрдм рдХреЛрдИ рдкреБрд░рд╛рдирд╛ рдХреНрд▓рд╛рдЗрдВрдЯ, рдирдП рд╕рд░реНрд╡рд░ рд╕реЗ рдпреВрдирд┐рдпрди рдкрд╛ рд░рд╣рд╛ рд╣реЛ.

рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд╡рд░реНрд╢рди рдореИрдиреЗрдЬ рдХрд░рдирд╛

Android рдореЗрдВ рд▓рд┐рдВрдХрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ, рдХрд┐рд╕реА рдЦрд╛рд╕ aidl рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рд╡рд░реНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП aidl рдЯрд╛рдЗрдк рдХреА рдХрдИ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реЛрдВ. C++ рдореЗрдВ One Definition Rule рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдореБрддрд╛рдмрд┐рдХ, рд╣рд░ рд╕рд┐рдВрдмрд▓ рдХреА рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП.

рдЬрдм рдХреЛрдИ рдореЙрдбреНрдпреВрд▓, рдПрдХ рд╣реА aidl_interface рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ Android рдмрд┐рд▓реНрдб рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рджрд┐рдЦрддреА рд╣реИ. рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓, рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдпрд╛ рдЗрдирдХреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЗ рдЬрд╝рд░рд┐рдП рдирд┐рд░реНрднрд░ рд╣реЛ. рдЗрди рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рд╕реЗ, рдлрд╝реЗрд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд▓реЗрдХрд░ aidl_interface рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЯрдХрд░рд╛рд╡ рд╡рд╛рд▓реЗ рд╡рд░реНрд╢рди рддрдХ рдХрд╛ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЧреНрд░рд╛рдлрд╝ рджрд┐рдЦрддрд╛ рд╣реИ. рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдПрдХ рд╣реА (рдЖрдо рддреМрд░ рдкрд░, рдирдП) рд╡рд░реНрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.

рдЕрдЧрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рдЧреНрд░реБрдк рдХреЗ рд▓рд┐рдП cc_defaults, java_defaults, рдФрд░ rust_defaults рдмрдирд╛рдирд╛ рдлрд╝рд╛рдпрджреЗрдордВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╣реА рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реИ. рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирдпрд╛ рд╡рд░реНрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдкрд░, рдЗрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЗрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдпрд╣ рдкрдХреНрдХрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рди рдХрд░реЗрдВ.

cc_defaults {
  name: "my.aidl.my-process-group-ndk-shared",
  shared_libs: ["my.aidl-V3-ndk"],
  ...
}

cc_library {
  name: "foo",
  defaults: ["my.aidl.my-process-group-ndk-shared"],
  ...
}

cc_binary {
  name: "bar",
  defaults: ["my.aidl.my-process-group-ndk-shared"],
  ...
}

рдЬрдм aidl_interface рдореЙрдбреНрдпреВрд▓, рдЕрдиреНрдп aidl_interface рдореЙрдбреНрдпреВрд▓ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдмрдирддреА рд╣реИрдВ. рдЗрдирдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рде рдХреБрдЫ рдЦрд╛рд╕ рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реЛрддрд╛ рд╣реИ. рдЬрдм рдХрдИ aidl_interface рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдЬреИрд╕реЗ aidl_interface рдореЙрдбреНрдпреВрд▓ рдЗрдВрдкреЛрд░реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрди рд╕рднреА aidl_interface рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдПрдХ рд╣реА рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.

aidl_interfaces_defaults рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, aidl_interface рдХреЗ рд▓рд┐рдП рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЗ рдирдП рд╡рд░реНрд╢рди рдХреА рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕реЗ рдПрдХ рд╣реА рдЬрдЧрд╣ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЙрди рд╕рднреА aidl_interface рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реИ.

aidl_interface_defaults {
  name: "android.popular.common-latest-defaults",
  imports: ["android.popular.common-V3"],
  ...
}

aidl_interface {
  name: "android.foo",
  defaults: ["my.aidl.latest-ndk-shared"],
  ...
}

aidl_interface {
  name: "android.bar",
  defaults: ["my.aidl.latest-ndk-shared"],
  ...
}

рдлрд╝реНрд▓реИрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ

рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рджреМрд░рд╛рди (рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдкрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛. рдЗрд╕рдХреА рд╡рдЬрд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирдХреЗ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрддреА.

рдПрдЖрдИрдбреАрдПрд▓, рдЗрди рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд░рди рдЯрд╛рдЗрдо рдлрд╝реЙрд▓рдмреИрдХ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдХреЛрдб рдХреЛ рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдирдП рд╡рд░реНрд╢рди рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдкрд░ рднреА рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреИрдХрд╡рд░реНрдб-рдХрдВрдкреИрдЯрд┐рдмрд▓ рд╡реНрдпрд╡рд╣рд╛рд░, рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЬреИрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдлрд╝реЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реЛрддрд╛ рд╣реИ. рд╡рд░реНрд╢рди рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

AIDL рдмрд┐рд▓реНрдб рдлрд╝реНрд▓реИрдЧ

рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝реНрд▓реИрдЧ RELEASE_AIDL_USE_UNFROZEN рд╣реИ. рдЗрд╕реЗ build/release/build_flags.bzl рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. true рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд░рди рдЯрд╛рдЗрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рд╡рд╣реАрдВ, false рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреА рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ. рд▓реЛрдХрд▓ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд▓реИрдЧ рдХреЛ true рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ false рдкрд░ рд╡рд╛рдкрд╕ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рдЖрдо рддреМрд░ рдкрд░, рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдРрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реНрд▓реИрдЧ рдХреЛ true рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ.

рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ

рд╡реЗрдВрдбрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ (рд╡реАрдЖрдИрдПрдирдЯреАрдПрдлрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ) рд╕реЗ рдпрд╣ рддрдп рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреМрдирд╕реЗ рд╡рд░реНрд╢рди рдЬрд╝рд░реВрд░реА рд╣реИрдВ рдФрд░ рд╡реЗрдВрдбрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рджреЛрдиреЛрдВ рдУрд░ рдХреМрдирд╕реЗ рд╡рд░реНрд╢рди рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рд╣реИрдВ.

рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдиреЙрди-рдХрдЯрд▓рдлрд╝рд┐рд╢ рдбрд┐рд╡рд╛рдЗрд╕, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА, рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдирдП рд╡рд░реНрд╢рди рдХреЛ рдЯрд╛рд░рдЧреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ. рдЗрд╕рд▓рд┐рдП, RELEASE_AIDL_USE_UNFROZEN рдХреЗ рдЖрдзрд╛рд░ рдкрд░ AIDL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрддрд╛.

рдореИрдЯреНрд░рд┐рдХреНрд╕

рдкрд╛рд░реНрдЯрдирд░ рдХреЗ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣рдХ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдкреНрд░реЙрдбрдХреНрдЯ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ. рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рджреМрд░рд╛рди, рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдиреНрд╣реАрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЯрд╛рд░рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдЬрдм рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирдП рдФрд░ рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреЛ рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд┐рдЫрд▓реЗ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреЛ RELEASE_AIDL_USE_UNFROZEN=false рддрдХ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ RELEASE_AIDL_USE_UNFROZEN рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╣реА рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛрдиреЛрдВ рд╡рд░реНрд╢рди рдХреЛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ.

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдлрд╝реНрд░реАрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди 4 рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ, рддрдм <version>3-4</version> рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

рд╡рд░реНрд╢рди 4 рдХреЗ рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛрдиреЗ рдкрд░, рд╡рд░реНрд╢рди 3 рдХреЛ рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ RELEASE_AIDL_USE_UNFROZEN рдХреЗ false рд╣реЛрдиреЗ рдкрд░, рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди 4 рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ

Android 15 рдореЗрдВ, libvintf рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЗрд╕рд╕реЗ libvintf рдХреА рд╡реИрд▓реНрдпреВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмрд┐рд▓реНрдб рдХреЗ рд╕рдордп рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.RELEASE_AIDL_USE_UNFROZEN

рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдФрд░ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рдпрд╣ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рд╕реЗрд╡рд╛, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд┐рд╕ рд╡рд░реНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ. рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдирдП рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╕рдордп, рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдирдпрд╛ рд╡рд░реНрд╢рди рджрд┐рдЦ рд╕рдХреЗ. рдЬрдм рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ AIDL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдмрджрд▓рд╛рд╡ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, RELEASE_AIDL_USE_UNFROZEN=false рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдПрдВрдЯреНрд░реА рдХреЛ libvintf рд╕реЗ рдЕрдбрдЬрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рд╡рд░реНрд╢рди рдХреЛ, рдлрд╝реНрд░реАрдЬрд╝ рди рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди N рд╕реЗ рдмрджрд▓рдХрд░, рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдЖрдЦрд┐рд░реА рд╡рд░реНрд╢рди N - 1 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреА рд╣рд░ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдпрд╛ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА.

рдПрдЪрдПрдПрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рд╣реБрдП рдмрджрд▓рд╛рд╡

HAL рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб, рдкрд╣рд▓реЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣рд░ рдлрд╝реНрд░реЛрдЬрд╝рди рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП. рдЬрдм RELEASE_AIDL_USE_UNFROZEN false рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реЗрд╡рд╛рдПрдВ рд╣рдореЗрд╢рд╛ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдпрд╛ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд╡рд░реНрд╢рди рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ UNKNOWN_TRANSACTION рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╛ parcelable рдХреЗ рдирдП рдлрд╝реАрд▓реНрдб рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рд╣реЛрддреА рд╣реИрдВ. Android рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╡реЗрдВрдбрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдкрд╛рд░реНрдЯрдирд░ рдХреЗ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣рдХ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдирдИ рд╣реИ.

рдПрдЪрдПрдПрд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдмрджрд▓рд╛рд╡

рдлрд╝реНрд▓реИрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдЪрдПрдПрд▓ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдЪрдПрдПрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рд╡рд╣ рдкрд┐рдЫрд▓реЗ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗ. рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ, рдЬрдм RELEASE_AIDL_USE_UNFROZEN false рд╣реЛ. рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛрдб рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ, рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИ. рд╡рд░реНрд╢рди рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.

рдЖрдо рддреМрд░ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдХреЛрдб рдФрд░ рд╡реЗрдВрдбрд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдмреИрдХрд╡рд░реНрдб рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рд╕реЗ рдЬреБрдбрд╝реА рдмрд╛рддреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реЛрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдирдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдПрдХ рд╣реА рд╕реЛрд░реНрд╕ рдХреЛрдб (рдореМрдЬреВрджрд╛, рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрд╢рди) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рд╡рд░реНрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ.

рдЙрджрд╛рд╣рд░рдг: рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддреАрди рдлрд╝реНрд░реЛрдЬрд╝рди рд╡рд░реНрд╢рди рд╣реИрдВ. рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдирдП рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕реЗрд╡рд╛, рджреЛрдиреЛрдВ рдХреЛ рдирдИ рд╡рд░реНрд╢рди 4 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. V4 рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдЬрдм RELEASE_AIDL_USE_UNFROZEN false рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди (рд╡рд░реНрд╢рди 3) рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИ. рд╕рд╛рде рд╣реА, рдирдП рддрд░реАрдХреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИ.

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛрдиреЗ рдкрд░, RELEASE_AIDL_USE_UNFROZEN рдХреА рд╕рднреА рд╡реИрд▓реНрдпреВ рдЙрд╕ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреА рд╣реИрдВ. рд╕рд╛рде рд╣реА, рдмреИрдХрд╡рд░реНрдб рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдХреЙрд▓рдмреИрдХ рдкрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ UNKNOWN_TRANSACTION рдХреЗ рдЬрд╡рд╛рдм рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдореИрдиреЗрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рдХреНрд▓рд╛рдЗрдВрдЯ, рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрд╢рди рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдмрд╕реЗ рдирдпрд╛ рд╡рд░реНрд╢рди рднреЗрдЬрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдирдП рддрд░реАрдХреЗ рдпрд╣ рд╡реИрд▓реНрдпреВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕реНрдЯреЗрдмрд▓ AIDL рдХреНрд▓рд╛рдЗрдВрдЯ, рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмреИрдХрд╡рд░реНрдб рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ. рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд░реНрд╢рди рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ.

// Get the callback along with the version of the callback
ScopedAStatus RegisterMyCallback(const std::shared_ptr<IMyCallback>& cb) override {
    mMyCallback = cb;
    // Get the version of the callback for later when we call methods on it
    auto status = mMyCallback->getInterfaceVersion(&mMyCallbackVersion);
    return status;
}

// Example of using the callback later
void NotifyCallbackLater() {
  // From the latest frozen version (V2)
  mMyCallback->foo();
  // Call this method from the unfrozen V3 only if the callback is at least V3
  if (mMyCallbackVersion >= 3) {
    mMyCallback->bar();
  }
}

рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдЯрд╛рдЗрдк (parcelable, enum, union) рдореЗрдВ рдореМрдЬреВрдж рдирдП рдлрд╝реАрд▓реНрдб, RELEASE_AIDL_USE_UNFROZEN рдХреЗ false рд╣реЛрдиреЗ рдкрд░ рдореМрдЬреВрдж рди рд╣реЛрдВ рдпрд╛ рдЙрдирдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рдореМрдЬреВрдж рд╣реЛрдВ. рд╕рд╛рде рд╣реА, рдРрд╕рд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕реЗрд╡рд╛ рдЬрд┐рди рдирдП рдлрд╝реАрд▓реНрдб рдХреА рд╡реИрд▓реНрдпреВ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИ рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП.

рдЗрд╕ рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдирдП рдЯрд╛рдЗрдк рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЬрд╝рд░рд┐рдП рди рддреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдЬрдм RELEASE_AIDL_USE_UNFROZEN false рд╣реЛрддрд╛ рд╣реИ, рддрдм рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛.

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдирдП рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕рд┐рд░реНрдлрд╝ рдЙрд╕реА рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЙрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП.

рдЖрдо рддреМрд░ рдкрд░, foo->getInterfaceVersion() рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд┐рд╕ рд╡рд░реНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд╝реНрд▓реИрдЧ-рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрд╢рдирд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдорджрдж рд╕реЗ, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ. рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрд╢рди рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд░реНрд╢рди рдкрд╛рдПрдВ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, this->getInterfaceVersion() рдпрд╛ my_ver рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддрд░реАрдХреЗ. рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд░рд┐рдореЛрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрд░рдирд╛ рджреЗрдЦреЗрдВ.

VINTF рдХреЗ рдирдП рд╕реНрдЯреЗрдмрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕

рдЬрдм рдХреЛрдИ рдирдпрд╛ рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдкрд┐рдЫрд▓рд╛ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛. рдЗрд╕рд▓рд┐рдП, рдЬрдм RELEASE_AIDL_USE_UNFROZEN false рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдРрд╕рд╛ рд╡рд░реНрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рдЬрд┐рд╕ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рдЬрд╛ рд╕рдХреЗ. рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рди рдХрд░реЗрдВ. рдЬрдм RELEASE_AIDL_USE_UNFROZEN false рд╣реЛрддрд╛ рд╣реИ, рддреЛ Service Manager, рд╕реЗрд╡рд╛ рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛. рд╕рд╛рде рд╣реА, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛.

рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореМрдЬреВрдж RELEASE_AIDL_USE_UNFROZEN рдлрд╝реНрд▓реИрдЧ рдХреА рд╡реИрд▓реНрдпреВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛рдПрдВ рдЬреЛрдбрд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ:

ifeq ($(RELEASE_AIDL_USE_UNFROZEN),true)
PRODUCT_PACKAGES += \
    android.hardware.health.storage-service
endif

рдЕрдЧрд░ рд╕реЗрд╡рд╛ рдХрд┐рд╕реА рдмрдбрд╝реА рдкреНрд░реЛрд╕реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛, рддреЛ рджреЗрдЦреЗрдВ рдХрд┐ рд╕реЗрд╡рд╛ рдХреЛ IServiceManager::isDeclared() рдХреЗ рд╕рд╛рде рддреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ. рдЕрдЧрд░ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛, рддреЛ рдкреНрд░реЛрд╕реЗрд╕ рдмрдВрдж рдХрд░ рджреЗрдВ. рдЕрдЧрд░ рдЗрд╕реЗ рдЬрд╝рд╛рд╣рд┐рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдЖ рд╕рдХрддреА рд╣реИ.

VINTF рдХреЗ рд╕реНрдЯреЗрдмрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕

рдирдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХреЛрдИ рдкрд┐рдЫрд▓рд╛ рд╡рд░реНрд╢рди рдирд╣реАрдВ рд╣реИ. рд╕рд╛рде рд╣реА, ServiceManager рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рди рд╣реЛрдиреЗ рдпрд╛ VINTF рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдПрд▓рд╛рди рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рд╡рдЬрд╣ рд╕реЗ, IServiceManager::isDeclared() рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХрдм рдЕрдЯреИрдЪ рдХрд░рдирд╛ рд╣реИ.

RELEASE_AIDL_USE_UNFROZEN рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдирдП рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдореМрдЬреВрджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЕрдЯреИрдЪ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЗрд╕рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдкрд░ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдлрд╝реНрд░реАрдЬрд╝ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ.

vts_treble_vintf_vendor_test рдФрд░ vts_treble_vintf_framework_test рд╡реАрдЯреАрдПрд╕ рдЯреЗрд╕реНрдЯ рд╕реЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ, рдЕрдирдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЗрд╕рд╕реЗ рдЧрдбрд╝рдмрдбрд╝реА рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ.

рдЕрдЧрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд░реНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА.

рдХрдЯрд▓рдлрд╝рд┐рд╢ рдХреЛ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреВрд▓ рдХреЗ рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛

VINTF рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╣рд░ рд╕рд╛рд▓ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдПрдлрд╝рд╕реАрдПрдо) target-level рдФрд░ Cuttlefish PRODUCT_SHIPPING_API_LEVEL рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╡реЗ рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВ. рд╣рдо target-level рдФрд░ PRODUCT_SHIPPING_API_LEVEL рдХреЛ рдЕрдбрдЬрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдпрд╣ рдкрдХреНрдХрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдРрд╕рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реЛ рдЬрд┐рд╕рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рд╣реЛ рдФрд░ рдЬреЛ рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдирдИ рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реЛ.

рдЬрдм RELEASE_AIDL_USE_UNFROZEN true рд╣реЛрддрд╛ рд╣реИ, рддрдм Cuttlefish рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ Android рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрд╢рди рдХреЛ рдбреЗрд╡рд▓рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдпрд╣ рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ Android рдХреЗ FCM рд▓реЗрд╡рд▓ рдФрд░ PRODUCT_SHIPPING_API_LEVEL рдХреЛ рдЯрд╛рд░рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╡реЗрдВрдбрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЛрдВ (рд╡реАрдПрд╕рдЖрд░) рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.

рдЬрдм RELEASE_AIDL_USE_UNFROZEN false рд╣реЛрддрд╛ рд╣реИ, рддреЛ Cuttlefish рдореЗрдВ рдкрд┐рдЫрд▓реЗ target-level рдФрд░ PRODUCT_SHIPPING_API_LEVEL рд╣реЛрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ. Android 14 рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд╡рд░реНрд╢рди рдореЗрдВ, рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ Git рдмреНрд░рд╛рдВрдЪ рдХреА рдорджрдж рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛. рдпреЗ рдмреНрд░рд╛рдВрдЪ, FCM target-level, рд╢рд┐рдкрд┐рдВрдЧ рдПрдкреАрдЖрдИ рд▓реЗрд╡рд▓ рдпрд╛ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдЯрд╛рд░рдЧреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛрдб рдореЗрдВ рд╣реБрдП рдмрджрд▓рд╛рд╡ рдХреЛ рдирд╣реАрдВ рдЪреБрдирддреА рдереАрдВ.

рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рд░рдЦрдиреЗ рдХреЗ рдирд┐рдпрдо

Android 11 рдореЗрдВ, рдЪрд╛рд▓реВ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдФрд░ рдмреИрдХрдПрдВрдб рдХреЗ рд╣рд░ рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЙрдбреНрдпреВрд▓ рдЕрдкрдиреЗ-рдЖрдк рдмрди рдЬрд╛рддрд╛ рд╣реИ. рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЦрд╛рд╕ рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд░реЗрдлрд╝рд░рдВрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, aidl_interface рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рди рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рдпрд╣ ifacename-version-backend рд╣реИ. рдпрд╣рд╛рдВ

  • ifacename: aidl_interface рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо
  • version рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╣реИ
    • рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреЗ рд▓рд┐рдП Vversion-number
    • Vlatest-frozen-version-number + 1, рдЯреНрд░реА рдХреЗ рд╕рдмрд╕реЗ рдирдП рд╡рд░реНрд╢рди (рдЕрднреА рдлрд╝реНрд░реАрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреЗ рд▓рд┐рдП
  • backend рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╣реИ
    • java Java рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП,
    • C++ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП cpp,
    • рдПрдирдбреАрдХреЗ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП, ndk рдпрд╛ ndk_platform. рдкрд╣рд▓рд╛, рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рджреВрд╕рд░рд╛, Android 13 рддрдХ рдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рд▓рд┐рдП рд╣реИ. Android 13 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд░реНрд╢рди рдореЗрдВ, рд╕рд┐рд░реНрдлрд╝ ndk рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
    • Rust рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП rust.

рдорд╛рди рд▓реЗрдВ рдХрд┐ foo рдирд╛рдо рдХрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдирдпрд╛ рд╡рд░реНрд╢рди 2 рд╣реИ. рд╕рд╛рде рд╣реА, рдпрд╣ NDK рдФрд░ C++ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, AIDL рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ:

  • рд╡рд░реНрд╢рди 1 рдХреЗ рдЖрдзрд╛рд░ рдкрд░
    • foo-V1-(java|cpp|ndk|ndk_platform|rust)
  • рд╡рд░реНрд╢рди 2 (рдирдпрд╛ рд╕реНрдЯреЗрдмрд▓ рд╡рд░реНрд╢рди) рдХреЗ рдЖрдзрд╛рд░ рдкрд░
    • foo-V2-(java|cpp|ndk|ndk_platform|rust)
  • ToT рд╡рд░реНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░
    • foo-V3-(java|cpp|ndk|ndk_platform|rust)

Android 11 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ:

  • foo-backend, рдЬреЛ рд╕рдмрд╕реЗ рдирдП рд╕реНрдЯреЗрдмрд▓ рд╡рд░реНрд╢рди рдХреЛ рд░реЗрдлрд╝рд░ рдХрд░рддрд╛ рд╣реИ, foo-V2-backend рдмрди рдЬрд╛рддрд╛ рд╣реИ
  • foo-unstable-backend, рдЬреЛ ToT рд╡рд░реНрд╢рди рдХреЛ рд░реЗрдлрд╝рд░ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ foo-V3-backend рдмрди рдЬрд╛рддрд╛ рд╣реИ

рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдо рд╣рдореЗрд╢рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдЬреИрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ.

  • рд╡рд░реНрд╢рди 1 рдХреЗ рдЖрдзрд╛рд░ рдкрд░: foo-V1-(cpp|ndk|ndk_platform|rust).so
  • рд╡рд░реНрд╢рди 2 рдХреЗ рдЖрдзрд╛рд░ рдкрд░: foo-V2-(cpp|ndk|ndk_platform|rust).so
  • ToT рд╡рд░реНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░: foo-V3-(cpp|ndk|ndk_platform|rust).so

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ AIDL рдХрдВрдкрд╛рдЗрд▓рд░, рд╕реНрдЯреЗрдмрд▓ AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рди рддреЛ unstable рд╡рд░реНрд╢рди рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдмрд┐рдирд╛ рд╡рд░реНрд╢рди рд╡рд╛рд▓рд╛ рдореЙрдбреНрдпреВрд▓. Android 12 рд╕реЗ, рд╕реНрдЯреЗрдмрд▓ AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЙрд╕рдХрд╛ рд╡рд░реНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ.

рдореЗрдЯрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирдП рддрд░реАрдХреЗ

Android 10 рдореЗрдВ, рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рдХреЗ рд▓рд┐рдП рдХрдИ рдореЗрдЯрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ.

рд░рд┐рдореЛрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрд░рдирд╛

рдХреНрд▓рд╛рдЗрдВрдЯ, рд░рд┐рдореЛрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд░реНрд╢рди рдФрд░ рд╣реИрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. рд╕рд╛рде рд╣реА, рджрд┐рдЦрд╛рдИ рдЧрдИ рд╡реИрд▓реНрдпреВ рдХреА рддреБрд▓рдирд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╡реИрд▓реНрдпреВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.

cpp рдмреИрдХрдПрдВрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг:

sp<IFoo> foo = ... // the remote object
int32_t my_ver = IFoo::VERSION;
int32_t remote_ver = foo->getInterfaceVersion();
if (remote_ver < my_ver) {
  // the remote side is using an older interface
}

std::string my_hash = IFoo::HASH;
std::string remote_hash = foo->getInterfaceHash();

ndk (рдФрд░ ndk_platform) рдмреИрдХрдПрдВрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг:

IFoo* foo = ... // the remote object
int32_t my_ver = IFoo::version;
int32_t remote_ver = 0;
if (foo->getInterfaceVersion(&remote_ver).isOk() && remote_ver < my_ver) {
  // the remote side is using an older interface
}

std::string my_hash = IFoo::hash;
std::string remote_hash;
foo->getInterfaceHash(&remote_hash);

java рдмреИрдХрдПрдВрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг:

IFoo foo = ... // the remote object
int myVer = IFoo.VERSION;
int remoteVer = foo.getInterfaceVersion();
if (remoteVer < myVer) {
  // the remote side is using an older interface
}

String myHash = IFoo.HASH;
String remoteHash = foo.getInterfaceHash();

Java рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП, рд░рд┐рдореЛрдЯ рд╕рд╛рдЗрдб рдХреЛ getInterfaceVersion() рдФрд░ getInterfaceHash() рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рдХреЙрдкреА рдФрд░ рдЪрд┐рдкрдХрд╛рдиреЗ рд╕реЗ рдЬреБрдбрд╝реА рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, IFoo рдХреЗ рдмрдЬрд╛рдп super рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. javac рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @SuppressWarnings("static") рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝ рд╕рдХрддреА рд╣реИ:

class MyFoo extends IFoo.Stub {
    @Override
    public final int getInterfaceVersion() { return super.VERSION; }

    @Override
    public final String getInterfaceHash() { return super.HASH; }
}

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдХреНрд▓рд╛рд╕ (IFoo, IFoo.Stub рд╡рдЧреИрд░рд╣) рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╢реЗрдпрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рд╕ рдмреВрдЯ рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ. рдХреНрд▓рд╛рд╕ рд╢реЗрдпрд░ рдХрд░рдиреЗ рдкрд░, рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд▓рд╛рд╕ рдХреЗ рдирдП рд╡рд░реНрд╢рди рд╕реЗ рднреА рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рднрд▓реЗ рд╣реА, рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ. рдЕрдЧрд░ рдЗрд╕ рдореЗрдЯрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╢реЗрдпрд░ рдХреА рдЧрдИ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдирдпрд╛ рд╡рд░реНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдКрдкрд░ рджрд┐рдП рдЧрдП рддрд░реАрдХреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрд╢рди рдирдВрдмрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдХреЛрдб рдореЗрдВ рдПрдореНрдмреЗрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ IFoo.VERSION рдПрдХ static final int рд╣реИ, рдЬрд┐рд╕реЗ рд░реЗрдлрд╝рд░рдВрд╕ рджреЗрддреЗ рд╕рдордп рдЗрдирд▓рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдпрд╣ рддрд░реАрдХрд╛ рдЙрд╕ рд╡рд░реНрд╢рди рдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛.

рдкреБрд░рд╛рдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирдП рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдкреБрд░рд╛рдиреЗ AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реЛ. рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреБрд░рд╛рдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХрд┐рд╕реА рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ UNKNOWN_TRANSACTION рдорд┐рд▓рддрд╛ рд╣реИ.

рд╕реНрдЯреЗрдмрд▓ AIDL рдХреА рдорджрдж рд╕реЗ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдЬрд╝реНрдпрд╛рджрд╛ рдХрдВрдЯреНрд░реЛрд▓ рд╣реЛрддрд╛ рд╣реИ. рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░, AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреМрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛ рд╕реЗрдЯ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдХрд┐рд╕реА рддрд░реАрдХреЗ рдХреЛ рд╕рд┐рд░реНрдлрд╝ рддрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЙрд╕реЗ рд░рд┐рдореЛрдЯ рд╕рд╛рдЗрдб рдореЗрдВ рд▓рд╛рдЧреВ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рдХреЛ рдЧреНрд▓реЛрдмрд▓ рд▓реЗрд╡рд▓ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдЗрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдРрд╕реЗ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╢реЗрдпрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

Android 13 рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд░реНрд╢рди рдореЗрдВ C++ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

class MyDefault : public IFooDefault {
  Status anAddedMethod(...) {
   // do something default
  }
};

// once per an interface in a process
IFoo::setDefaultImpl(::android::sp<MyDefault>::make());

foo->anAddedMethod(...); // MyDefault::anAddedMethod() will be called if the
                         // remote side is not implementing it

Java рдореЗрдВ рдЙрджрд╛рд╣рд░рдг:

IFoo.Stub.setDefaultImpl(new IFoo.Default() {
    @Override
    public xxx anAddedMethod(...)  throws RemoteException {
        // do something default
    }
}); // once per an interface in a process

foo.anAddedMethod(...);

рдЖрдкрдХреЛ рдХрд┐рд╕реА AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рднреА рддрд░реАрдХреЛрдВ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реАрдХрд╛ рджреЗрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ. рдЬрд┐рди рддрд░реАрдХреЛрдВ рдХреЛ рд░рд┐рдореЛрдЯ рд╕рд╛рдЗрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдпреЗ рддрд░реАрдХреЗ AIDL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмреНрдпреМрд░реЗ рдореЗрдВ рдереЗ, рддрдм рд░рд┐рдореЛрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛), рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ impl рдХреНрд▓рд╛рд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА.

рдореМрдЬреВрджрд╛ AIDL рдХреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдпрд╛ рд╕реНрдЯреЗрдмрд▓ AIDL рдореЗрдВ рдмрджрд▓рдирд╛

рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдХреЛрдИ рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдЙрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ.

  1. рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕рднреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВ. рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд┐рд╕ рднреА рдкреИрдХреЗрдЬ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рддрдп рдХрд░реЗрдВ рдХрд┐ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдЯреЗрдмрд▓ рдПрдЖрдИрдбреАрдПрд▓ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЕрдЧрд░ рдЗрд╕реЗ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреИрдХреЗрдЬ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛.

  2. рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдкрд╛рд░реНрд╕рд▓реЗрдмрд▓ рдХреЛ рд╕реНрдЯреЗрдмрд▓ рдкрд╛рд░реНрд╕рд▓реЗрдмрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ. рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, AIDL рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдВ. рдЗрди рдирдП рдЯрд╛рдЗрдк рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛. рдпрд╣ рдХрд╛рдо, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП aidl_interface рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

  3. рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рддрд░реАрдХреЗ рд╕реЗ, рдПрдХ aidl_interface рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ. рдЗрд╕рдореЗрдВ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо, рдЙрд╕рдХреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА, рдФрд░ рдХреЛрдИ рднреА рдЕрдиреНрдп рдЬрд╝рд░реВрд░реА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ. рдЗрд╕реЗ рд╕реНрдерд┐рд░ (рд╕рд┐рд░реНрдлрд╝ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдирд╣реАрдВ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рд╡рд░реНрд╢рди рднреА рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП. рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд░реНрд╢рди рджреЗрдЦреЗрдВ.