diff options
-rw-r--r-- | core/java/com/android/server/SystemConfig.java | 9 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 38 | ||||
-rw-r--r-- | tests/OdmApps/Android.mk | 26 | ||||
-rw-r--r-- | tests/OdmApps/AndroidTest.xml | 27 | ||||
-rw-r--r-- | tests/OdmApps/app/Android.mk | 22 | ||||
-rwxr-xr-x | tests/OdmApps/app/AndroidManifest.xml | 21 | ||||
-rw-r--r-- | tests/OdmApps/priv-app/Android.mk | 22 | ||||
-rwxr-xr-x | tests/OdmApps/priv-app/AndroidManifest.xml | 21 | ||||
-rw-r--r-- | tests/OdmApps/src/com/android/test/odm/app/OdmAppsTest.java | 35 |
9 files changed, 216 insertions, 5 deletions
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index 8b1de2fb886e..9d4b5aa9fc73 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -284,8 +284,9 @@ public class SystemConfig { readPermissions(Environment.buildPath( Environment.getVendorDirectory(), "etc", "permissions"), vendorPermissionFlag); - // Allow ODM to customize system configs around libs, features and apps - int odmPermissionFlag = ALLOW_LIBS | ALLOW_FEATURES | ALLOW_APP_CONFIGS; + // Allow ODM to customize system configs as much as Vendor, because /odm is another + // vendor partition other than /vendor. + int odmPermissionFlag = vendorPermissionFlag; readPermissions(Environment.buildPath( Environment.getOdmDirectory(), "etc", "sysconfig"), odmPermissionFlag); readPermissions(Environment.buildPath( @@ -631,7 +632,9 @@ public class SystemConfig { // granting permissions to priv apps in the system partition and vice // versa. boolean vendor = permFile.toPath().startsWith( - Environment.getVendorDirectory().toPath()); + Environment.getVendorDirectory().toPath()) + || permFile.toPath().startsWith( + Environment.getOdmDirectory().toPath()); boolean product = permFile.toPath().startsWith( Environment.getProductDirectory().toPath()); if (vendor) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index f12795be658c..eb9fe9cbd39c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2592,7 +2592,7 @@ public class PackageManagerService extends IPackageManager.Stub | SCAN_AS_PRIVILEGED, 0); - // Collected privileged system packages. + // Collect privileged system packages. final File privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app"); scanDirTracedLI(privilegedAppDir, mDefParseFlags @@ -2611,7 +2611,7 @@ public class PackageManagerService extends IPackageManager.Stub | SCAN_AS_SYSTEM, 0); - // Collected privileged vendor packages. + // Collect privileged vendor packages. File privilegedVendorAppDir = new File(Environment.getVendorDirectory(), "priv-app"); try { privilegedVendorAppDir = privilegedVendorAppDir.getCanonicalFile(); @@ -2642,6 +2642,40 @@ public class PackageManagerService extends IPackageManager.Stub | SCAN_AS_VENDOR, 0); + // Collect privileged odm packages. /odm is another vendor partition + // other than /vendor. + File privilegedOdmAppDir = new File(Environment.getOdmDirectory(), + "priv-app"); + try { + privilegedOdmAppDir = privilegedOdmAppDir.getCanonicalFile(); + } catch (IOException e) { + // failed to look up canonical path, continue with original one + } + scanDirTracedLI(privilegedOdmAppDir, + mDefParseFlags + | PackageParser.PARSE_IS_SYSTEM_DIR, + scanFlags + | SCAN_AS_SYSTEM + | SCAN_AS_VENDOR + | SCAN_AS_PRIVILEGED, + 0); + + // Collect ordinary odm packages. /odm is another vendor partition + // other than /vendor. + File odmAppDir = new File(Environment.getOdmDirectory(), "app"); + try { + odmAppDir = odmAppDir.getCanonicalFile(); + } catch (IOException e) { + // failed to look up canonical path, continue with original one + } + scanDirTracedLI(odmAppDir, + mDefParseFlags + | PackageParser.PARSE_IS_SYSTEM_DIR, + scanFlags + | SCAN_AS_SYSTEM + | SCAN_AS_VENDOR, + 0); + // Collect all OEM packages. final File oemAppDir = new File(Environment.getOemDirectory(), "app"); scanDirTracedLI(oemAppDir, diff --git a/tests/OdmApps/Android.mk b/tests/OdmApps/Android.mk new file mode 100644 index 000000000000..64fa65325acc --- /dev/null +++ b/tests/OdmApps/Android.mk @@ -0,0 +1,26 @@ +# Copyright (C) 2018 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. + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := OdmAppsTest +LOCAL_MODULE_TAGS := tests +LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_JAVA_LIBRARIES := tradefed +LOCAL_COMPATIBILITY_SUITE := device-tests +include $(BUILD_HOST_JAVA_LIBRARY) + +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/OdmApps/AndroidTest.xml b/tests/OdmApps/AndroidTest.xml new file mode 100644 index 000000000000..2f1283850a97 --- /dev/null +++ b/tests/OdmApps/AndroidTest.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 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. +--> +<configuration description="Config for ODM apps test"> + <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer"> + <option name="cleanup" value="true" /> + <option name="remount-system" value="true" /> + <option name="push" value="TestOdmApp.apk->/odm/app/TestOdmApp/TestOdmApp.apk" /> + <option name="push" value="TestOdmPrivApp.apk->/odm/priv-app/TestOdmPrivApp/TestOdmPrivApp.apk" /> + <option name="post-push" value="stop; start; sleep 5" /> + </target_preparer> + <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest" > + <option name="jar" value="OdmAppsTest.jar" /> + </test> +</configuration> diff --git a/tests/OdmApps/app/Android.mk b/tests/OdmApps/app/Android.mk new file mode 100644 index 000000000000..9eec0cc4f66f --- /dev/null +++ b/tests/OdmApps/app/Android.mk @@ -0,0 +1,22 @@ +# Copyright (C) 2018 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. + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_PACKAGE_NAME := TestOdmApp +LOCAL_MODULE_TAGS := tests +LOCAL_COMPATIBILITY_SUITE := device-tests +LOCAL_SDK_VERSION := current +include $(BUILD_PACKAGE) diff --git a/tests/OdmApps/app/AndroidManifest.xml b/tests/OdmApps/app/AndroidManifest.xml new file mode 100755 index 000000000000..84a9ea84b522 --- /dev/null +++ b/tests/OdmApps/app/AndroidManifest.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * Copyright (C) 2018 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. + --> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.test.odm.app"> +</manifest> + diff --git a/tests/OdmApps/priv-app/Android.mk b/tests/OdmApps/priv-app/Android.mk new file mode 100644 index 000000000000..d423133fc9f5 --- /dev/null +++ b/tests/OdmApps/priv-app/Android.mk @@ -0,0 +1,22 @@ +# Copyright (C) 2018 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. + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_PACKAGE_NAME := TestOdmPrivApp +LOCAL_MODULE_TAGS := tests +LOCAL_COMPATIBILITY_SUITE := device-tests +LOCAL_SDK_VERSION := current +include $(BUILD_PACKAGE) diff --git a/tests/OdmApps/priv-app/AndroidManifest.xml b/tests/OdmApps/priv-app/AndroidManifest.xml new file mode 100755 index 000000000000..031cf64ea7b1 --- /dev/null +++ b/tests/OdmApps/priv-app/AndroidManifest.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * Copyright (C) 2018 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. + --> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.test.odm.privapp"> +</manifest> + diff --git a/tests/OdmApps/src/com/android/test/odm/app/OdmAppsTest.java b/tests/OdmApps/src/com/android/test/odm/app/OdmAppsTest.java new file mode 100644 index 000000000000..de742b80a372 --- /dev/null +++ b/tests/OdmApps/src/com/android/test/odm/app/OdmAppsTest.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2018 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. + */ + +package com.android.test.odm.apps; + +import com.android.tradefed.testtype.DeviceTestCase; + +public class OdmAppsTest extends DeviceTestCase { + /** + * Test if /odm/app is working + */ + public void testOdmApp() throws Exception { + assertNotNull(getDevice().getAppPackageInfo("com.android.test.odm.app")); + } + + /** + * Test if /odm/priv-app is working + */ + public void testOdmPrivApp() throws Exception { + assertNotNull(getDevice().getAppPackageInfo("com.android.test.odm.privapp")); + } +} |