diff options
author | Sebastian Porst <sporst@google.com> | 2012-10-09 11:52:55 -0700 |
---|---|---|
committer | Sebastian Porst <sporst@google.com> | 2012-10-09 11:53:18 -0700 |
commit | 8e85c5aa8462e2e9c7add924d57fecd44c3763fa (patch) | |
tree | 611f5653495a207aa38af8068bceac01b08811e6 /lint | |
parent | c5fce2e12268c60332b7011cee8c1081ad424950 (diff) | |
download | sdk-8e85c5aa8462e2e9c7add924d57fecd44c3763fa.zip sdk-8e85c5aa8462e2e9c7add924d57fecd44c3763fa.tar.gz sdk-8e85c5aa8462e2e9c7add924d57fecd44c3763fa.tar.bz2 |
Added a lint checker to flag permissions that are only granted to system applications
Change-Id: If423ad3c477dbad9011b600e5c8d8773963d27b9
Diffstat (limited to 'lint')
4 files changed, 596 insertions, 1 deletions
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java index 7b18f81..80c3a5a 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java @@ -55,7 +55,7 @@ public class BuiltinIssueRegistry extends IssueRegistry { private static final List<Issue> sIssues; static { - final int initialCapacity = 115; + final int initialCapacity = 116; List<Issue> issues = new ArrayList<Issue>(initialCapacity); issues.add(AccessibilityDetector.ISSUE); @@ -173,6 +173,7 @@ public class BuiltinIssueRegistry extends IssueRegistry { issues.add(NonInternationalizedSmsDetector.ISSUE); issues.add(PrivateKeyDetector.ISSUE); issues.add(AnnotationDetector.ISSUE); + issues.add(SystemPermissionsDetector.ISSUE); assert initialCapacity >= issues.size() : issues.size(); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SystemPermissionsDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SystemPermissionsDetector.java new file mode 100644 index 0000000..641c74a --- /dev/null +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SystemPermissionsDetector.java @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2012 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.tools.lint.checks; + +import static com.android.SdkConstants.ANDROID_MANIFEST_XML; +import static com.android.SdkConstants.ANDROID_URI; +import static com.android.SdkConstants.ATTR_NAME; +import static com.android.SdkConstants.TAG_USES_PERMISSION; + +import com.android.annotations.NonNull; +import com.android.tools.lint.detector.api.Category; +import com.android.tools.lint.detector.api.Context; +import com.android.tools.lint.detector.api.Detector; +import com.android.tools.lint.detector.api.Issue; +import com.android.tools.lint.detector.api.Scope; +import com.android.tools.lint.detector.api.Severity; +import com.android.tools.lint.detector.api.Speed; +import com.android.tools.lint.detector.api.XmlContext; + +import org.w3c.dom.Attr; +import org.w3c.dom.Element; + +import java.io.File; +import java.util.Arrays; +import java.util.Collection; +import java.util.EnumSet; + +/** + * Checks if an application wants to use permissions that can only be used by + * system applications. + */ +public class SystemPermissionsDetector extends Detector implements Detector.XmlScanner { + /** The main issue discovered by this detector */ + public static final Issue ISSUE = Issue.create( + "ProtectedPermissons", //$NON-NLS-1$ + "Looks for permissions that are only granted to system apps", + + "Permissions with the protection level signature or signatureOrSystem are only " + + "granted to system apps. If an app is a regular non-system app, it will never be " + + "able to use these permissions.", + + Category.CORRECTNESS, + 5, + Severity.ERROR, + SystemPermissionsDetector.class, + EnumSet.of(Scope.MANIFEST)); + + // List of permissions have the protection levels signature or systemOrSignature. + // This list must be sorted alphabetically. + private static final String[] SYSTEM_PERMISSIONS = new String[] { + "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE", + "android.permission.ACCESS_CACHE_FILESYSTEM", + "android.permission.ACCESS_CHECKIN_PROPERTIES", + "android.permission.ACCESS_MTP", + "android.permission.ACCESS_SURFACE_FLINGER", + "android.permission.ACCOUNT_MANAGER", + "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK", + "android.permission.ASEC_ACCESS", + "android.permission.ASEC_CREATE", + "android.permission.ASEC_DESTROY", + "android.permission.ASEC_MOUNT_UNMOUNT", + "android.permission.ASEC_RENAME", + "android.permission.BACKUP", + "android.permission.BIND_APPWIDGET", + "android.permission.BIND_DEVICE_ADMIN", + "android.permission.BIND_INPUT_METHOD", + "android.permission.BIND_PACKAGE_VERIFIER", + "android.permission.BIND_REMOTEVIEWS", + "android.permission.BIND_TEXT_SERVICE", + "android.permission.BIND_VPN_SERVICE", + "android.permission.BIND_WALLPAPER", + "android.permission.BRICK", + "android.permission.BROADCAST_PACKAGE_REMOVED", + "android.permission.BROADCAST_SMS", + "android.permission.BROADCAST_WAP_PUSH", + "android.permission.CALL_PRIVILEGED", + "android.permission.CHANGE_BACKGROUND_DATA_SETTING", + "android.permission.CHANGE_COMPONENT_ENABLED_STATE", + "android.permission.CLEAR_APP_USER_DATA", + "android.permission.CONFIRM_FULL_BACKUP", + "android.permission.CONNECTIVITY_INTERNAL", + "android.permission.CONTROL_LOCATION_UPDATES", + "android.permission.COPY_PROTECTED_DATA", + "android.permission.CRYPT_KEEPER", + "android.permission.DELETE_CACHE_FILES", + "android.permission.DELETE_PACKAGES", + "android.permission.DEVICE_POWER", + "android.permission.DIAGNOSTIC", + "android.permission.DUMP", + "android.permission.FACTORY_TEST", + "android.permission.FORCE_BACK", + "android.permission.FORCE_STOP_PACKAGES", + "android.permission.GLOBAL_SEARCH", + "android.permission.GLOBAL_SEARCH_CONTROL", + "android.permission.HARDWARE_TEST", + "android.permission.INJECT_EVENTS", + "android.permission.INSTALL_LOCATION_PROVIDER", + "android.permission.INSTALL_PACKAGES", + "android.permission.INTERNAL_SYSTEM_WINDOW", + "android.permission.MANAGE_APP_TOKENS", + "android.permission.MANAGE_NETWORK_POLICY", + "android.permission.MANAGE_USB", + "android.permission.MASTER_CLEAR", + "android.permission.MODIFY_NETWORK_ACCOUNTING", + "android.permission.MODIFY_PHONE_STATE", + "android.permission.MOVE_PACKAGE", + "android.permission.NET_ADMIN", + "android.permission.MODIFY_PHONE_STATE", + "android.permission.PACKAGE_USAGE_STATS", + "android.permission.PACKAGE_VERIFICATION_AGENT", + "android.permission.PERFORM_CDMA_PROVISIONING", + "android.permission.READ_FRAME_BUFFER", + "android.permission.READ_INPUT_STATE", + "android.permission.READ_NETWORK_USAGE_HISTORY", + "android.permission.READ_PRIVILEGED_PHONE_STATE", + "android.permission.REBOOT", + "android.permission.RECEIVE_EMERGENCY_BROADCAST", + "android.permission.REMOVE_TASKS", + "android.permission.RETRIEVE_WINDOW_CONTENT", + "android.permission.SEND_SMS_NO_CONFIRMATION", + "android.permission.SET_ACTIVITY_WATCHER", + "android.permission.SET_ORIENTATION", + "android.permission.SET_POINTER_SPEED", + "android.permission.SET_PREFERRED_APPLICATIONS", + "android.permission.SET_SCREEN_COMPATIBILITY", + "android.permission.SET_TIME", + "android.permission.SET_WALLPAPER_COMPONENT", + "android.permission.SHUTDOWN", + "android.permission.STATUS_BAR", + "android.permission.STATUS_BAR_SERVICE", + "android.permission.STOP_APP_SWITCHES", + "android.permission.UPDATE_DEVICE_STATS", + "android.permission.WRITE_APN_SETTINGS", + "android.permission.WRITE_GSERVICES", + "android.permission.WRITE_MEDIA_STORAGE", + "android.permission.WRITE_SECURE_SETTINGS" + }; + + /** Constructs a new {@link SystemPermissionsDetector} check */ + public SystemPermissionsDetector() { + } + + @Override + public @NonNull Speed getSpeed() { + return Speed.FAST; + } + + @Override + public boolean appliesTo(@NonNull Context context, @NonNull File file) { + return file.getName().equals(ANDROID_MANIFEST_XML); + } + + // ---- Implements Detector.XmlScanner ---- + + @Override + public Collection<String> getApplicableElements() { + return Arrays.asList(TAG_USES_PERMISSION); + } + + @Override + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { + Attr nameNode = element.getAttributeNodeNS(ANDROID_URI, ATTR_NAME); + if (nameNode != null) { + String permissionName = nameNode.getValue(); + if (Arrays.binarySearch(SYSTEM_PERMISSIONS, permissionName) >= 0) { + context.report(ISSUE, context.getLocation(nameNode), + "Permission is only granted to system apps", null); + } + } + } +} diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/SystemPermissionsDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/SystemPermissionsDetectorTest.java new file mode 100644 index 0000000..baa6fd4 --- /dev/null +++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/SystemPermissionsDetectorTest.java @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2012 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.tools.lint.checks; + +import com.android.tools.lint.detector.api.Detector; + +@SuppressWarnings("javadoc") +public class SystemPermissionsDetectorTest extends AbstractCheckTest { + @Override + protected Detector getDetector() { + return new SystemPermissionsDetector(); + } + + public void testBrokenOrder() throws Exception { + assertEquals( + "AndroidManifest.xml:15: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:16: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ACCESS_CACHE_FILESYSTEM\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:17: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ACCESS_CHECKIN_PROPERTIES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:18: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ACCESS_MTP\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:19: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ACCESS_SURFACE_FLINGER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:20: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ACCOUNT_MANAGER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:21: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:22: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ASEC_ACCESS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:23: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ASEC_CREATE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:24: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ASEC_DESTROY\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:25: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ASEC_MOUNT_UNMOUNT\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:26: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.ASEC_RENAME\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:27: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BACKUP\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:28: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_APPWIDGET\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:29: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_DEVICE_ADMIN\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:30: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_INPUT_METHOD\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:31: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_PACKAGE_VERIFIER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:32: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_REMOTEVIEWS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:33: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_TEXT_SERVICE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:34: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_VPN_SERVICE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:35: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BIND_WALLPAPER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:36: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BRICK\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:37: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_REMOVED\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:38: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BROADCAST_SMS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:39: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.BROADCAST_WAP_PUSH\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:40: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CALL_PRIVILEGED\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:41: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CHANGE_BACKGROUND_DATA_SETTING\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:42: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CHANGE_COMPONENT_ENABLED_STATE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:43: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CLEAR_APP_USER_DATA\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:44: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CONFIRM_FULL_BACKUP\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:45: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CONNECTIVITY_INTERNAL\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:46: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CONTROL_LOCATION_UPDATES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:47: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.COPY_PROTECTED_DATA\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:48: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.CRYPT_KEEPER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:49: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.DELETE_CACHE_FILES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:50: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.DELETE_PACKAGES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:51: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.DEVICE_POWER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:52: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.DIAGNOSTIC\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:53: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.DUMP\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:54: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.FACTORY_TEST\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:55: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.FORCE_BACK\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:56: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.FORCE_STOP_PACKAGES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:57: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.GLOBAL_SEARCH\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:58: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.GLOBAL_SEARCH_CONTROL\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:59: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.HARDWARE_TEST\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:60: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.INJECT_EVENTS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:61: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.INSTALL_LOCATION_PROVIDER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:62: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.INSTALL_PACKAGES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:63: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.INTERNAL_SYSTEM_WINDOW\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:64: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MANAGE_APP_TOKENS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:65: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MANAGE_NETWORK_POLICY\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:66: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MANAGE_USB\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:67: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MASTER_CLEAR\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:68: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MODIFY_NETWORK_ACCOUNTING\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:69: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MODIFY_PHONE_STATE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:70: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MOVE_PACKAGE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:71: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.NET_ADMIN\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:72: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.MODIFY_PHONE_STATE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:73: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.PACKAGE_USAGE_STATS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:74: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.PACKAGE_VERIFICATION_AGENT\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:75: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.PERFORM_CDMA_PROVISIONING\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:76: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.READ_FRAME_BUFFER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:77: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.READ_INPUT_STATE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:78: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.READ_NETWORK_USAGE_HISTORY\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:79: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.READ_PRIVILEGED_PHONE_STATE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:80: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.REBOOT\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:81: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.RECEIVE_EMERGENCY_BROADCAST\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:82: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.REMOVE_TASKS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:83: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.RETRIEVE_WINDOW_CONTENT\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:84: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SEND_SMS_NO_CONFIRMATION\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:85: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SET_ACTIVITY_WATCHER\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:86: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SET_ORIENTATION\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:87: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SET_POINTER_SPEED\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:88: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SET_PREFERRED_APPLICATIONS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:89: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SET_SCREEN_COMPATIBILITY\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:90: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SET_TIME\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:91: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SET_WALLPAPER_COMPONENT\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:92: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.SHUTDOWN\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:93: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.STATUS_BAR\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:94: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.STATUS_BAR_SERVICE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:95: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.STOP_APP_SWITCHES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:96: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.UPDATE_DEVICE_STATS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:97: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.WRITE_APN_SETTINGS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:98: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.WRITE_GSERVICES\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:99: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.WRITE_MEDIA_STORAGE\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "AndroidManifest.xml:100: Error: Permission is only granted to system apps [ProtectedPermissons]\n" + + " <uses-permission android:name=\"android.permission.WRITE_SECURE_SETTINGS\" />\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "86 errors, 0 warnings\n", + + lintProject( + "protectedpermissions.xml=>AndroidManifest.xml")); + } +} diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/protectedpermissions.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/protectedpermissions.xml new file mode 100644 index 0000000..8b62497 --- /dev/null +++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/protectedpermissions.xml @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="foo.bar2" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk android:minSdkVersion="14" /> + + <!-- No warnings for those --> + <uses-permission android:name="android.permission.GET_ACCOUNTS" /> + <uses-permission android:name="android.permission.SEND_SMS" /> + <uses-permission android:name="android.permission.INTERNET" /> + + <!-- Warnings for those --> + <uses-permission android:name="android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE" /> + <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /> + <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" /> + <uses-permission android:name="android.permission.ACCESS_MTP" /> + <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> + <uses-permission android:name="android.permission.ACCOUNT_MANAGER" /> + <uses-permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK" /> + <uses-permission android:name="android.permission.ASEC_ACCESS" /> + <uses-permission android:name="android.permission.ASEC_CREATE" /> + <uses-permission android:name="android.permission.ASEC_DESTROY" /> + <uses-permission android:name="android.permission.ASEC_MOUNT_UNMOUNT" /> + <uses-permission android:name="android.permission.ASEC_RENAME" /> + <uses-permission android:name="android.permission.BACKUP" /> + <uses-permission android:name="android.permission.BIND_APPWIDGET" /> + <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" /> + <uses-permission android:name="android.permission.BIND_INPUT_METHOD" /> + <uses-permission android:name="android.permission.BIND_PACKAGE_VERIFIER" /> + <uses-permission android:name="android.permission.BIND_REMOTEVIEWS" /> + <uses-permission android:name="android.permission.BIND_TEXT_SERVICE" /> + <uses-permission android:name="android.permission.BIND_VPN_SERVICE" /> + <uses-permission android:name="android.permission.BIND_WALLPAPER" /> + <uses-permission android:name="android.permission.BRICK" /> + <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" /> + <uses-permission android:name="android.permission.BROADCAST_SMS" /> + <uses-permission android:name="android.permission.BROADCAST_WAP_PUSH" /> + <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> + <uses-permission android:name="android.permission.CHANGE_BACKGROUND_DATA_SETTING" /> + <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" /> + <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" /> + <uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP" /> + <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" /> + <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> + <uses-permission android:name="android.permission.COPY_PROTECTED_DATA" /> + <uses-permission android:name="android.permission.CRYPT_KEEPER" /> + <uses-permission android:name="android.permission.DELETE_CACHE_FILES" /> + <uses-permission android:name="android.permission.DELETE_PACKAGES" /> + <uses-permission android:name="android.permission.DEVICE_POWER" /> + <uses-permission android:name="android.permission.DIAGNOSTIC" /> + <uses-permission android:name="android.permission.DUMP" /> + <uses-permission android:name="android.permission.FACTORY_TEST" /> + <uses-permission android:name="android.permission.FORCE_BACK" /> + <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> + <uses-permission android:name="android.permission.GLOBAL_SEARCH" /> + <uses-permission android:name="android.permission.GLOBAL_SEARCH_CONTROL" /> + <uses-permission android:name="android.permission.HARDWARE_TEST" /> + <uses-permission android:name="android.permission.INJECT_EVENTS" /> + <uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" /> + <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> + <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" /> + <uses-permission android:name="android.permission.MANAGE_APP_TOKENS" /> + <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" /> + <uses-permission android:name="android.permission.MANAGE_USB" /> + <uses-permission android:name="android.permission.MASTER_CLEAR" /> + <uses-permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING" /> + <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> + <uses-permission android:name="android.permission.MOVE_PACKAGE" /> + <uses-permission android:name="android.permission.NET_ADMIN" /> + <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> + <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> + <uses-permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT" /> + <uses-permission android:name="android.permission.PERFORM_CDMA_PROVISIONING" /> + <uses-permission android:name="android.permission.READ_FRAME_BUFFER" /> + <uses-permission android:name="android.permission.READ_INPUT_STATE" /> + <uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" /> + <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" /> + <uses-permission android:name="android.permission.REBOOT" /> + <uses-permission android:name="android.permission.RECEIVE_EMERGENCY_BROADCAST" /> + <uses-permission android:name="android.permission.REMOVE_TASKS" /> + <uses-permission android:name="android.permission.RETRIEVE_WINDOW_CONTENT" /> + <uses-permission android:name="android.permission.SEND_SMS_NO_CONFIRMATION" /> + <uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER" /> + <uses-permission android:name="android.permission.SET_ORIENTATION" /> + <uses-permission android:name="android.permission.SET_POINTER_SPEED" /> + <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" /> + <uses-permission android:name="android.permission.SET_SCREEN_COMPATIBILITY" /> + <uses-permission android:name="android.permission.SET_TIME" /> + <uses-permission android:name="android.permission.SET_WALLPAPER_COMPONENT" /> + <uses-permission android:name="android.permission.SHUTDOWN" /> + <uses-permission android:name="android.permission.STATUS_BAR" /> + <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" /> + <uses-permission android:name="android.permission.STOP_APP_SWITCHES" /> + <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" /> + <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" /> + <uses-permission android:name="android.permission.WRITE_GSERVICES" /> + <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" /> + <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> + + <application + android:icon="@drawable/ic_launcher" + android:label="@string/app_name" > + <activity + android:label="@string/app_name" + android:name=".Foo2Activity" > + <intent-filter > + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> + +</manifest>
\ No newline at end of file |