diff --git a/audio/aidl/default/Android.bp b/audio/aidl/default/Android.bp index bfa2783970..e65ee771e6 100644 --- a/audio/aidl/default/Android.bp +++ b/audio/aidl/default/Android.bp @@ -118,8 +118,6 @@ cc_library { cc_binary { name: "android.hardware.audio.service-aidl.example", relative_install_path: "hw", - init_rc: ["android.hardware.audio.service-aidl.example.rc"], - vintf_fragments: ["android.hardware.audio.service-aidl.xml"], defaults: [ "aidlaudioservice_defaults", "latest_android_hardware_audio_core_sounddose_ndk_shared", @@ -146,6 +144,7 @@ cc_binary { "-Wthread-safety", "-DBACKEND_NDK", ], + installable: false, //installed in apex com.android.hardware.audio } cc_test { @@ -239,10 +238,9 @@ filegroup { cc_binary { name: "android.hardware.audio.effect.service-aidl.example", relative_install_path: "hw", - init_rc: ["android.hardware.audio.effect.service-aidl.example.rc"], - vintf_fragments: ["android.hardware.audio.effect.service-aidl.xml"], defaults: ["aidlaudioeffectservice_defaults"], shared_libs: [ + "libapexsupport", "libtinyxml2", ], srcs: [ @@ -250,6 +248,7 @@ cc_binary { "EffectFactory.cpp", "EffectMain.cpp", ], + installable: false, //installed in apex com.android.hardware.audio.effect } cc_library_headers { @@ -258,3 +257,22 @@ cc_library_headers { vendor_available: true, host_supported: true, } + +prebuilt_etc { + name: "android.hardware.audio.service-aidl.example.rc", + src: "android.hardware.audio.service-aidl.example.rc", + installable: false, +} + +prebuilt_etc { + name: "android.hardware.audio.service-aidl.xml", + src: "android.hardware.audio.service-aidl.xml", + sub_dir: "vintf", + installable: false, +} + +prebuilt_etc { + name: "audio_effects_config.xml", + src: "audio_effects_config.xml", + installable: false, +} diff --git a/audio/aidl/default/EffectConfig.cpp b/audio/aidl/default/EffectConfig.cpp index 4a12f8a7df..1cc48978d3 100644 --- a/audio/aidl/default/EffectConfig.cpp +++ b/audio/aidl/default/EffectConfig.cpp @@ -24,6 +24,10 @@ #include "effectFactory-impl/EffectConfig.h" +#ifdef __ANDROID_APEX__ +#include +#endif + using aidl::android::media::audio::common::AudioSource; using aidl::android::media::audio::common::AudioStreamType; using aidl::android::media::audio::common::AudioUuid; @@ -89,6 +93,24 @@ std::vector> EffectConfig::ge } bool EffectConfig::resolveLibrary(const std::string& path, std::string* resolvedPath) { + if (__builtin_available(android AAPEXSUPPORT_API, *)) { + AApexInfo *apexInfo; + if (AApexInfo_create(&apexInfo) == AAPEXINFO_OK) { + std::string apexName(AApexInfo_getName(apexInfo)); + AApexInfo_destroy(apexInfo); + std::string candidatePath("/apex/"); + candidatePath.append(apexName).append(kEffectLibApexPath).append(path); + LOG(DEBUG) << __func__ << " effect lib path " << candidatePath; + if (access(candidatePath.c_str(), R_OK) == 0) { + *resolvedPath = std::move(candidatePath); + return true; + } + } + } else { + LOG(DEBUG) << __func__ << " libapexsupport is not supported"; + } + + // If audio effects libs are not in vendor apex, locate them in kEffectLibPath for (auto* libraryDirectory : kEffectLibPath) { std::string candidatePath = std::string(libraryDirectory) + '/' + path; if (access(candidatePath.c_str(), R_OK) == 0) { diff --git a/audio/aidl/default/EffectMain.cpp b/audio/aidl/default/EffectMain.cpp index ca81204823..ac178b6a06 100644 --- a/audio/aidl/default/EffectMain.cpp +++ b/audio/aidl/default/EffectMain.cpp @@ -21,15 +21,39 @@ #include #include +#ifdef __ANDROID_APEX__ +#include +#endif + /** Default name of effect configuration file. */ static const char* kDefaultConfigName = "audio_effects_config.xml"; +static inline std::string config_file_path() { + if (__builtin_available(android AAPEXSUPPORT_API, *)) { + AApexInfo *apexInfo; + if (AApexInfo_create(&apexInfo) == AAPEXINFO_OK) { + std::string apexName(AApexInfo_getName(apexInfo)); + AApexInfo_destroy(apexInfo); + std::string candidatePath("/apex/"); + candidatePath.append(apexName).append("/etc/").append(kDefaultConfigName); + LOG(DEBUG) << __func__ << " effect lib path " << candidatePath; + if (access(candidatePath.c_str(), R_OK) == 0) { + return std::move(candidatePath); + } + } + } else { + LOG(DEBUG) << __func__ << " libapexsupport is not supported"; + } + LOG(DEBUG) << __func__ << ": Unable to resolve config file path in APEX"; + return android::audio_find_readable_configuration_file(kDefaultConfigName); +} + int main() { // This is a debug implementation, always enable debug logging. android::base::SetMinimumLogSeverity(::android::base::DEBUG); ABinderProcess_setThreadPoolMaxThreadCount(0); - auto configFile = android::audio_find_readable_configuration_file(kDefaultConfigName); + auto configFile = config_file_path(); if (configFile == "") { LOG(ERROR) << __func__ << ": config file " << kDefaultConfigName << " not found!"; return EXIT_FAILURE; diff --git a/audio/aidl/default/acousticEchoCanceler/Android.bp b/audio/aidl/default/acousticEchoCanceler/Android.bp index 35d4a56e21..d0404cd57b 100644 --- a/audio/aidl/default/acousticEchoCanceler/Android.bp +++ b/audio/aidl/default/acousticEchoCanceler/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/android.hardware.audio.effect.service-aidl.example.rc b/audio/aidl/default/android.hardware.audio.effect.service-aidl.example.rc deleted file mode 100644 index 5f859a1994..0000000000 --- a/audio/aidl/default/android.hardware.audio.effect.service-aidl.example.rc +++ /dev/null @@ -1,11 +0,0 @@ -service vendor.audio-effect-hal-aidl /vendor/bin/hw/android.hardware.audio.effect.service-aidl.example - class hal - user audioserver - # media gid needed for /dev/fm (radio) and for /data/misc/media (tee) - group audio media - capabilities BLOCK_SUSPEND - # setting RLIMIT_RTPRIO allows binder RT priority inheritance - rlimit rtprio 10 10 - ioprio rt 4 - task_profiles ProcessCapacityHigh HighPerformance - onrestart restart audioserver diff --git a/audio/aidl/default/android.hardware.audio.effect.service-aidl.xml b/audio/aidl/default/android.hardware.audio.effect.service-aidl.xml deleted file mode 100644 index 05a825db1b..0000000000 --- a/audio/aidl/default/android.hardware.audio.effect.service-aidl.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - android.hardware.audio.effect - 2 - IFactory/default - - diff --git a/audio/aidl/default/android.hardware.audio.service-aidl.example.rc b/audio/aidl/default/android.hardware.audio.service-aidl.example.rc index 757976fbc3..c3e19ba28a 100644 --- a/audio/aidl/default/android.hardware.audio.service-aidl.example.rc +++ b/audio/aidl/default/android.hardware.audio.service-aidl.example.rc @@ -1,4 +1,5 @@ -service vendor.audio-hal-aidl /vendor/bin/hw/android.hardware.audio.service-aidl.example + +service vendor.audio-hal-aidl /apex/com.android.hardware.audio/bin/hw/android.hardware.audio.service-aidl.example class hal user audioserver # media gid needed for /dev/fm (radio) and for /data/misc/media (tee) @@ -9,3 +10,15 @@ service vendor.audio-hal-aidl /vendor/bin/hw/android.hardware.audio.service-aidl ioprio rt 4 task_profiles ProcessCapacityHigh HighPerformance onrestart restart audioserver + +service vendor.audio-effect-hal-aidl /apex/com.android.hardware.audio/bin/hw/android.hardware.audio.effect.service-aidl.example + class hal + user audioserver + # media gid needed for /dev/fm (radio) and for /data/misc/media (tee) + group audio media + capabilities BLOCK_SUSPEND + # setting RLIMIT_RTPRIO allows binder RT priority inheritance + rlimit rtprio 10 10 + ioprio rt 4 + task_profiles ProcessCapacityHigh HighPerformance + onrestart restart audioserver \ No newline at end of file diff --git a/audio/aidl/default/android.hardware.audio.service-aidl.xml b/audio/aidl/default/android.hardware.audio.service-aidl.xml index 2a518763f1..5278e4f147 100644 --- a/audio/aidl/default/android.hardware.audio.service-aidl.xml +++ b/audio/aidl/default/android.hardware.audio.service-aidl.xml @@ -31,4 +31,9 @@ IModule/usb --> + + android.hardware.audio.effect + 2 + IFactory/default + diff --git a/audio/aidl/default/apex/com.android.hardware.audio/Android.bp b/audio/aidl/default/apex/com.android.hardware.audio/Android.bp new file mode 100644 index 0000000000..da84412290 --- /dev/null +++ b/audio/aidl/default/apex/com.android.hardware.audio/Android.bp @@ -0,0 +1,49 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "hardware_interfaces_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["hardware_interfaces_license"], +} + +apex { + name: "com.android.hardware.audio", + manifest: "manifest.json", + file_contexts: "file_contexts", + key: "com.android.hardware.key", + certificate: ":com.android.hardware.certificate", + updatable: false, + vendor: true, + + binaries: [ + "android.hardware.audio.service-aidl.example", + "android.hardware.audio.effect.service-aidl.example", + ], + native_shared_libs: [ + "libaecsw", + "libagc1sw", + "libagc2sw", + "libbassboostsw", + "libbundleaidl", + "libdownmixaidl", + "libdynamicsprocessingaidl", + "libenvreverbsw", + "libequalizersw", + "libextensioneffect", + "libhapticgeneratoraidl", + "libloudnessenhanceraidl", + "libnssw", + "libpreprocessingaidl", + "libpresetreverbsw", + "libreverbaidl", + "libvirtualizersw", + "libvisualizeraidl", + "libvolumesw", + ], + prebuilts: [ + "android.hardware.audio.service-aidl.example.rc", + "android.hardware.audio.service-aidl.xml", + "audio_effects_config.xml", + ], +} diff --git a/audio/aidl/default/apex/com.android.hardware.audio/file_contexts b/audio/aidl/default/apex/com.android.hardware.audio/file_contexts new file mode 100644 index 0000000000..41a6ada761 --- /dev/null +++ b/audio/aidl/default/apex/com.android.hardware.audio/file_contexts @@ -0,0 +1,4 @@ +(/.*)? u:object_r:vendor_file:s0 +/etc(/.*)? u:object_r:vendor_configs_file:s0 +/bin/hw/android\.hardware\.audio\.service-aidl\.example u:object_r:hal_audio_default_exec:s0 +/bin/hw/android\.hardware\.audio\.effect\.service-aidl\.example u:object_r:hal_audio_default_exec:s0 \ No newline at end of file diff --git a/audio/aidl/default/apex/com.android.hardware.audio/manifest.json b/audio/aidl/default/apex/com.android.hardware.audio/manifest.json new file mode 100644 index 0000000000..42a2368a21 --- /dev/null +++ b/audio/aidl/default/apex/com.android.hardware.audio/manifest.json @@ -0,0 +1,4 @@ +{ + "name": "com.android.hardware.audio", + "version": 1 +} diff --git a/audio/aidl/default/automaticGainControlV1/Android.bp b/audio/aidl/default/automaticGainControlV1/Android.bp index 05c2c543d7..7b753ebed8 100644 --- a/audio/aidl/default/automaticGainControlV1/Android.bp +++ b/audio/aidl/default/automaticGainControlV1/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/automaticGainControlV2/Android.bp b/audio/aidl/default/automaticGainControlV2/Android.bp index dedc555a82..ea0515270e 100644 --- a/audio/aidl/default/automaticGainControlV2/Android.bp +++ b/audio/aidl/default/automaticGainControlV2/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/bassboost/Android.bp b/audio/aidl/default/bassboost/Android.bp index 9f4777025c..8f53eaed4b 100644 --- a/audio/aidl/default/bassboost/Android.bp +++ b/audio/aidl/default/bassboost/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/envReverb/Android.bp b/audio/aidl/default/envReverb/Android.bp index 2443c2ac3a..23495f1cb2 100644 --- a/audio/aidl/default/envReverb/Android.bp +++ b/audio/aidl/default/envReverb/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/equalizer/Android.bp b/audio/aidl/default/equalizer/Android.bp index 42708d1253..1d29d40b86 100644 --- a/audio/aidl/default/equalizer/Android.bp +++ b/audio/aidl/default/equalizer/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/extension/Android.bp b/audio/aidl/default/extension/Android.bp index 5fee479f93..2b21e3e942 100644 --- a/audio/aidl/default/extension/Android.bp +++ b/audio/aidl/default/extension/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/include/effectFactory-impl/EffectConfig.h b/audio/aidl/default/include/effectFactory-impl/EffectConfig.h index 344846a4ca..7456b99999 100644 --- a/audio/aidl/default/include/effectFactory-impl/EffectConfig.h +++ b/audio/aidl/default/include/effectFactory-impl/EffectConfig.h @@ -64,12 +64,16 @@ class EffectConfig { const ProcessingLibrariesMap& getProcessingMap() const; private: - static constexpr const char* kEffectLibPath[] = #ifdef __LP64__ - {"/odm/lib64/soundfx", "/vendor/lib64/soundfx", "/system/lib64/soundfx"}; +#define SOUND_FX_PATH "/lib64/soundfx/" #else - {"/odm/lib/soundfx", "/vendor/lib/soundfx", "/system/lib/soundfx"}; +#define SOUND_FX_PATH "/lib/soundfx/" #endif + static constexpr const char* kEffectLibPath[] = + { "/odm" SOUND_FX_PATH, "/vendor" SOUND_FX_PATH, "/system" SOUND_FX_PATH }; + + static constexpr const char* kEffectLibApexPath = SOUND_FX_PATH; +#undef SOUND_FX_PATH int mSkippedElements; /* Parsed Libraries result */ diff --git a/audio/aidl/default/noiseSuppression/Android.bp b/audio/aidl/default/noiseSuppression/Android.bp index f24ded6fac..5729571318 100644 --- a/audio/aidl/default/noiseSuppression/Android.bp +++ b/audio/aidl/default/noiseSuppression/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/presetReverb/Android.bp b/audio/aidl/default/presetReverb/Android.bp index d6001410e9..2a2ae758bf 100644 --- a/audio/aidl/default/presetReverb/Android.bp +++ b/audio/aidl/default/presetReverb/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/virtualizer/Android.bp b/audio/aidl/default/virtualizer/Android.bp index 1c41bb5dd9..5d59f7c37f 100644 --- a/audio/aidl/default/virtualizer/Android.bp +++ b/audio/aidl/default/virtualizer/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], } diff --git a/audio/aidl/default/volume/Android.bp b/audio/aidl/default/volume/Android.bp index f1a051f522..8d5401a21f 100644 --- a/audio/aidl/default/volume/Android.bp +++ b/audio/aidl/default/volume/Android.bp @@ -34,6 +34,6 @@ cc_library_shared { ], relative_install_path: "soundfx", visibility: [ - "//hardware/interfaces/audio/aidl/default", + "//hardware/interfaces/audio/aidl/default:__subpackages__", ], }