# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# A lazy service that is started and stopped dynamically as needed.
service artd /apex/com.android.art/bin/artd
    interface aidl artd
    disabled  # Prevents the service from automatically starting at boot.
    oneshot  # Prevents the service from automatically restarting each time it is stopped.
    class core
    user artd
    group artd
    capabilities DAC_OVERRIDE DAC_READ_SEARCH FOWNER CHOWN

# Run at boot in Android U and later.
service art_boot /apex/com.android.art/bin/art_boot
    disabled  # Started explicitly from system/core/rootdir/init.rc
    oneshot
    class core
