Ошибка java lang securityexception permission denial

I have a library (jar) on build path of my project. The project accesses the MainActivity in the jar, using the following intent:

final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);

It used to work for sometime, but suddenly started getting ‘ActivityNotFoundException: No Activity found to handle Intent’ which I was able to resolve. But now I am stuck with a ‘java.lang.SecurityException: Permission Denial: starting Intent’.

I have tried all suggestions made on stackoverflow (check for duplicates in manifest file; add android:exported=»true» to lib manifest; Eclipse> Project> Clean; adding/ modifying ‘intent-filter’ tags; etc.). I even tried re-writing the manifest of the project but not going anywhere with it.

Here’s the logcat output:

11-07 06:20:52.176: E/AndroidRuntime(4626): FATAL EXCEPTION: main
11-07 06:20:52.176: E/AndroidRuntime(4626): java.lang.SecurityException: Permission     Denial: starting Intent { cmp=com.example.lib/.MainActivity } from ProcessRecord{40dd3778     4626:com.example.project/u0a10046} (pid=4626, uid=10046) not exported from uid 10047
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Parcel.readException(Parcel.java:1425)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Parcel.readException(Parcel.java:1379)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1885)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1412)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivityForResult(Activity.java:3370)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivityForResult(Activity.java:3331)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:824)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivity(Activity.java:3566)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.startActivity(Activity.java:3534)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.example.project.MainActivity.onOptionsItemSelected(MainActivity.java:93)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.Activity.onMenuItemSelected(Activity.java:2548)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:366)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:547)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.view.View.performClick(View.java:4204)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.view.View$PerformClick.run(View.java:17355)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Handler.handleCallback(Handler.java:725)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.os.Looper.loop(Looper.java:137)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at android.app.ActivityThread.main(ActivityThread.java:5041)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at java.lang.reflect.Method.invokeNative(Native Method)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at java.lang.reflect.Method.invoke(Method.java:511)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at dalvik.system.NativeStart.main(Native Method)

Manifest XML of Project:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.project"
android:versionCode="4"
android:versionName="4.0" >

<!-- Permissions -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<supports-screens android:anyDensity="true" />

<!-- SDK Settings -->
<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="18" />

<!-- APP Start -->
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

<!-- App Activity -->
    <activity
        android:name="com.example.project.MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<!-- Library Activity -->
    <activity android:name="com.example.lib.MainActivity" android:label="LibMain">
         <intent-filter>
        <action android:name="android.intent.action.MAIN"></action>
     </intent-filter>
    </activity>

</application>
<!-- END - APP -->

</manifest>

What am I overlooking? Any suggestions?

EDIT

I updated the manifest.xml with all other activities & somehow, that resolved the problem. The intent activity starts up without any errors. BUT, this is only on AVD. On actual device, it is still throwing same error. I have uninstalled the app from device completely and reinstalled, yet the same error.

@JuanEstrellaM @mykola-mokhnach

I am still facing the same error, with my phone (Realme X), i have follwed the below steps
First Enable Developer Option second step enable USB Debugging
And very important Step:
Step 3. Search for «Disable Permission Monitoring» and Enable it.

image
image

eclipse error log:
below error i am recived after follwing above steps:

java.lang.reflect.InvocationTargetException
Unable to create a new remote session. Please check the server log for more details. Original error: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
at getResponseForW3CError (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolerrors.js:804:9)
at asyncHandler (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolprotocol.js:381:37)
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
org.openqa.selenium.SessionNotCreatedException: Unable to create a new remote session. Please check the server log for more details. Original error: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
at getResponseForW3CError (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolerrors.js:804:9)
at asyncHandler (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolprotocol.js:381:37)
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:208)
at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:217)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131)
at io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:38)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:84)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:94)
at Calculatortest.CalculatorTest.openCalculator(CalculatorTest.java:44)
at Calculatortest.CalculatorTest.main(CalculatorTest.java:16)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:186)
… 12 more
Caused by: org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
at getResponseForW3CError (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolerrors.js:804:9)
at asyncHandler (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolprotocol.js:381:37)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
… 17 more

CMD run log:

[HTTP] —> POST /wd/hub/session
[HTTP] {«desiredCapabilities»:{«appActivity»:»com.android.calculator2.Calculator»,»appPackage»:»com.coloros.calculator»,»platformVersion»:»10″,»platformName»:»Android»,»udid»:»2af3ce9b»,»deviceName»:»Realme X»},»capabilities»:{«firstMatch»:[{«appium:appActivity»:»com.android.calculator2.Calculator»,»appium:appPackage»:»com.coloros.calculator»,»appium:deviceName»:»Realme X»,»platformName»:»android»,»appium:platformVersion»:»10″,»appium:udid»:»2af3ce9b»}]}}
[debug] [W3C] Calling AppiumDriver.createSession() with args: [{«appActivity»:»com.android.calculator2.Calculator»,»appPackage»:»com.coloros.calculator»,»platformVersion»:»10″,»platformName»:»Android»,»udid»:»2af3ce9b»,»deviceName»:»Realme X»},null,{«firstMatch»:[{«appium:appActivity»:»com.android.calculator2.Calculator»,»appium:appPackage»:»com.coloros.calculator»,»appium:deviceName»:»Realme X»,»platformName»:»android»,»appium:platformVersion»:»10″,»appium:udid»:»2af3ce9b»}]}]
[debug] [BaseDriver] Event ‘newSessionRequested’ logged at 1601963419149 (11:20:19 GMT+0530 (India Standard Time))
[Appium]
[Appium] ======================================================================
[Appium] DEPRECATION WARNING:
[Appium]
[Appium] The ‘automationName’ capability was not provided in the desired
[Appium] capabilities for this Android session
[Appium]
[Appium] Setting ‘automationName=UiAutomator2’ by default and using the
[Appium] UiAutomator2 Driver
[Appium]
[Appium] The next major version of Appium (2.x) will require the
[Appium] ‘automationName’ capability to be set for all sessions on all
[Appium] platforms
[Appium]
[Appium] In previous versions (Appium <= 1.13.x), the default was
[Appium] ‘automationName=UiAutomator1’
[Appium]
[Appium] If you wish to use that automation instead of UiAutomator2, please
[Appium] add ‘automationName=UiAutomator1’ to your desired capabilities
[Appium]
[Appium] For more information about drivers, please visit
[Appium] http://appium.io/docs/en/about-appium/intro/ and explore the
[Appium] ‘Drivers’ menu
[Appium]
[Appium] ======================================================================
[Appium]
[Appium] Appium v1.18.2 creating new AndroidUiautomator2Driver (v1.56.1) session
[debug] [BaseDriver] W3C capabilities and MJSONWP desired capabilities were provided
[debug] [BaseDriver] Creating session with W3C capabilities: {
[debug] [BaseDriver] «alwaysMatch»: {
[debug] [BaseDriver] «platformName»: «android»,
[debug] [BaseDriver] «appium:appActivity»: «com.android.calculator2.Calculator»,
[debug] [BaseDriver] «appium:appPackage»: «com.coloros.calculator»,
[debug] [BaseDriver] «appium:deviceName»: «Realme X»,
[debug] [BaseDriver] «appium:platformVersion»: «10»,
[debug] [BaseDriver] «appium:udid»: «2af3ce9b»
[debug] [BaseDriver] },
[debug] [BaseDriver] «firstMatch»: [
[debug] [BaseDriver] {}
[debug] [BaseDriver] ]
[debug] [BaseDriver] }
[BaseDriver] Session created with session id: 0afbbf37-94f4-4147-996b-980ac0d2ff53
[UiAutomator2] Starting ‘com.coloros.calculator’ directly on the device
[ADB] Found 1 ‘build-tools’ folders under ‘C:UserspriyaAppDataLocalAndroidSdk’ (newest first):
[ADB] C:/Users/priya/AppData/Local/Android/Sdk/build-tools/30.0.2
[ADB] Using ‘adb.exe’ from ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 start-server’
[AndroidDriver] Retrieving device list
[debug] [ADB] Trying to find a connected android device
[debug] [ADB] Getting connected devices
[debug] [ADB] Connected devices: [{«udid»:»2af3ce9b»,»state»:»device»}]
[AndroidDriver] Using device: 2af3ce9b
[ADB] Using ‘adb.exe’ from ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 start-server’
[debug] [ADB] Setting device id to 2af3ce9b
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell getprop ro.build.version.sdk’
[debug] [ADB] Current device property ‘ro.build.version.sdk’: 29
[ADB] Getting device platform version
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell getprop ro.build.version.release’
[debug] [ADB] Current device property ‘ro.build.version.release’: 10
[debug] [ADB] Device API level: 29
[UiAutomator2] Relaxing hidden api policy
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell ‘settings put global hidden_api_policy_pre_p_apps 1;settings put global hidden_api_policy_p_apps 1;settings put global hidden_api_policy 1»
[AndroidDriver] No app sent in, not parsing package/activity
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b wait-for-device’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell echo ping’
[debug] [AndroidDriver] Pushing settings apk to device…
[debug] [ADB] Getting install status for io.appium.settings
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.settings’
[debug] [ADB] ‘io.appium.settings’ is installed
[debug] [ADB] Getting package info for ‘io.appium.settings’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.settings’
[debug] [ADB] The version name of the installed ‘io.appium.settings’ is greater or equal to the application version name (‘3.2.0’ >= ‘3.2.0’)
[debug] [ADB] There is no need to install/upgrade ‘C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesio.appium.settingsapkssettings_apk-debug.apk’
[debug] [ADB] Getting IDs of all ‘io.appium.settings’ processes
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell ‘pgrep —help; echo $?»
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pgrep -f io.appium.settings’
[debug] [ADB] Getting IDs of all ‘io.appium.settings’ processes
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pgrep -f io.appium.settings’
[debug] [ADB] Starting Appium Settings app
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell am start -n io.appium.settings/.Settings -a android.intent.action.MAIN -c android.intent.category.LAUNCHER’
[debug] [ADB] Getting IDs of all ‘io.appium.settings’ processes
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pgrep -f io.appium.settings’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell appops set io.appium.settings android:mock_location allow’
[debug] [Logcat] Starting logs capture with command: C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b logcat -v threadtime
[debug] [UiAutomator2] Forwarding UiAutomator2 Server port 6790 to 8200
[debug] [ADB] Forwarding system: 8200 to device: 6790
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b forward tcp:8200 tcp:6790’
[debug] [ADB] Getting install status for io.appium.uiautomator2.server
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.uiautomator2.server’
[debug] [ADB] ‘io.appium.uiautomator2.server’ is installed
[debug] [ADB] Getting package info for ‘io.appium.uiautomator2.server’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.uiautomator2.server’
[debug] [ADB] The version name of the installed ‘io.appium.uiautomator2.server’ is greater or equal to the application version name (‘4.12.2’ >= ‘4.12.2’)
[debug] [UiAutomator2] io.appium.uiautomator2.server installation state: sameVersionInstalled
[debug] [ADB] Checking app cert for C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-v4.12.2.apk
[ADB] Using ‘apksigner.jar’ from ‘C:UserspriyaAppDataLocalAndroidSdkbuild-tools30.0.2libapksigner.jar’
[debug] [ADB] Starting apksigner: ‘C:Program FilesJavajdk1.8.0_261binjava.exe’ -Xmx1024M -Xss1m -jar C:UserspriyaAppDataLocalAndroidSdkbuild-tools30.0.2libapksigner.jar verify —print-certs C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-v4.12.2.apk
[debug] [ADB] apksigner stdout: Signer #1 certificate DN: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
[debug] [ADB] Signer #1 certificate SHA-256 digest: a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc
[debug] [ADB] Signer #1 certificate SHA-1 digest: 61ed377e85d386a8dfee6b864bd85b0bfaa5af81
[debug] [ADB] Signer #1 certificate MD5 digest: e89b158e4bcf988ebd09eb83f5378e87
[debug] [ADB]
[debug] [ADB] ‘C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-v4.12.2.apk’ is signed with the default certificate
[debug] [ADB] Getting install status for io.appium.uiautomator2.server.test
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.uiautomator2.server.test’
[debug] [ADB] ‘io.appium.uiautomator2.server.test’ is installed
[debug] [ADB] Checking app cert for C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-debug-androidTest.apk
[debug] [ADB] Starting apksigner: ‘C:Program FilesJavajdk1.8.0_261binjava.exe’ -Xmx1024M -Xss1m -jar C:UserspriyaAppDataLocalAndroidSdkbuild-tools30.0.2libapksigner.jar verify —print-certs C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-debug-androidTest.apk
[debug] [ADB] apksigner stdout: Signer #1 certificate DN: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
[debug] [ADB] Signer #1 certificate SHA-256 digest: a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc
[debug] [ADB] Signer #1 certificate SHA-1 digest: 61ed377e85d386a8dfee6b864bd85b0bfaa5af81
[debug] [ADB] Signer #1 certificate MD5 digest: e89b158e4bcf988ebd09eb83f5378e87
[debug] [ADB]
[debug] [ADB] ‘C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-debug-androidTest.apk’ is signed with the default certificate
[UiAutomator2] Server packages are not going to be (re)installed
[debug] [UiAutomator2] Waiting up to 30000ms for services to be available
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm list instrumentation’
[debug] [UiAutomator2] Instrumentation target ‘io.appium.uiautomator2.server.test/androidx.test.runner.AndroidJUnitRunner’ is available
[debug] [UiAutomator2] No app capability. Assuming it is already on the device
[debug] [ADB] Getting install status for com.coloros.calculator
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package com.coloros.calculator’
[debug] [ADB] ‘com.coloros.calculator’ is installed
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell am force-stop com.coloros.calculator’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’
[debug] [UiAutomator2] Deleting UiAutomator2 session
[debug] [UiAutomator2] Deleting UiAutomator2 server session
[debug] [WD Proxy] Matched ‘/’ to command name ‘deleteSession’
[UiAutomator2] Did not get confirmation UiAutomator2 deleteSession worked; Error was: UnknownError: An unknown server-side error occurred while processing the command. Original error: Trying to proxy a session command without session id
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell am force-stop com.coloros.calculator’
[debug] [Logcat] Stopping logcat capture
[debug] [ADB] Removing forwarded port socket connection: 8200
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b forward —remove tcp:8200’
[UiAutomator2] Restoring hidden api policy to the device default configuration
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell ‘settings delete global hidden_api_policy_pre_p_apps;settings delete global hidden_api_policy_p_apps;settings delete global hidden_api_policy»
[debug] [BaseDriver] Event ‘newSessionStarted’ logged at 1601963425198 (11:20:25 GMT+0530 (India Standard Time))
[debug] [W3C] Encountered internal error running command: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.
[debug] [W3C]
[debug] [W3C] java.lang.SecurityException: adb clearing user data is forbidden.
[debug] [W3C] at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
[debug] [W3C] at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
[debug] [W3C] at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
[debug] [W3C] at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
[debug] [W3C] at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
[debug] [W3C] at android.os.ShellCommand.exec(ShellCommand.java:104)
[debug] [W3C] at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
[debug] [W3C] at android.os.Binder.shellCommand(Binder.java:881)
[debug] [W3C] at android.os.Binder.onTransact(Binder.java:765)
[debug] [W3C] at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
[debug] [W3C] at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
[debug] [W3C] at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
[debug] [W3C] at android.os.Binder.execTransactInternal(Binder.java:1021)
[debug] [W3C] at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
[debug] [W3C] Error: Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255
[debug] [W3C] at ChildProcess. (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesteen_processlibexec.js:113:19)
[debug] [W3C] at ChildProcess.emit (events.js:315:20)
[debug] [W3C] at maybeClose (internal/child_process.js:1021:16)
[debug] [W3C] at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
[debug] [W3C] Destroying socket connection
[HTTP] <— POST /wd/hub/session 500 6237 ms — 3879
[HTTP]

Program Code:

package Calculatortest;

import java.net.URL;

import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;

public class CalculatorTest {

static AppiumDriver <MobileElement> driver;

public static void main(String[] args) {
	try {
		openCalculator();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		
		System.out.println(e.getCause());
		System.out.println(e.getMessage());
		e.printStackTrace();
	}
	
}
	// TODO Auto-generated method stub
	
	public static void openCalculator() throws Exception
	{
	
	DesiredCapabilities cap= new DesiredCapabilities();
	//cap.setCapability("deviceName", "OPPO F1s X");
	cap.setCapability("deviceName", "Realme X");
	//cap.setCapability("udid", "JR55OVOV99999999");
	cap.setCapability("udid", "2af3ce9b");
	cap.setCapability("platformName", "Android");
	cap.setCapability("platformVersion", "10");
	cap.setCapability("appPackage", "com.coloros.calculator");
	cap.setCapability("appActivity", "com.android.calculator2.Calculator");
	//cap.setCapability("appPackage", "com.qaddoo");
			//cap.setCapability("appActivity", "com.Qaddoo.mvvm.ui.activities.MainActivity");
	
	URL url = new URL("http://127.0.0.1:4723/wd/hub");
	driver =new AppiumDriver<MobileElement>(url, cap);

System.out.println(«Application started»);
}

}

Kinldly help

Операционная система Android устроена таким образом, что для выполнения некоторых операций или доступа к определенным ресурсам, приложение должно иметь разрешение на это.

Разрешения могут быть двух типов: normal и dangerous. Отличие между ними в том, что dangerous разрешения опасны, т.к. могут быть использованы для получения ваших личных данных или информации о вас, или еще каким-то способом могут навредить вам. Примеры dangerous разрешений — это доступ к контактам или смс.

Полный список существующих разрешений можно посмотреть здесь. Характеристика Protection level подскажет насколько опасно это разрешение. А здесь можно сразу просмотреть весь список normal разрешений.

Если приложению необходимо получить какое-либо разрешение, то оно должно быть указано в AndroidManifest.xml, в корневом теге <manifest>. Тег разрешения — <uses-permission>.

Вот пример манифеста с разрешениями:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.someapplication">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.SEND_SMS" />

    <application
    ...
    ></application>

</manifest>

Здесь мы указываем, что приложению понадобятся разрешения на работу с интернет, контактами, bluetooth, локацией, камерой и смс. Пользователю необходимо будет подтвердить, что он предоставляет приложению эти разрешения.

В этом материале мы подробно рассмотрим, как происходит это подтверждение.

До Android 6

До выхода Android 6 все было просто и легко. Когда пользователь устанавливал приложение с манифестом, который мы рассмотрели чуть выше, то он видел такой экран:

Система показывает разрешения, которые были прописаны в манифесте. Сначала те, которые могут быть опасными с точки зрения приватности (отправка смс, доступ к камере/местоположению/контактам), а затем — обычные (интернет, bluetooth).

Таким образом пользователь видит, на что претендует приложение, и может примерно понять все ли в порядке. Если, например, приложение калькулятор при установке просит у вас доступ к контактам и смс, то скорее всего, что-то не так с этим приложением и оно может быть опасным для ваших данных.

Нажав кнопку Install, пользователь автоматически подтверждает свое согласие, что приложению будут предоставлены эти запрашиваемые разрешения. И далее, когда приложение, например, пытается в коде получить список контактов, то оно без проблем их получает.

Если же в манифесте не указать разрешение READ_CONTACTS, то его не будет и в списке тех разрешений, которые подтверждает пользователь. Соответственно, система не предоставит этому приложению доступ к контактам. И при попытке получить список контактов, будет ошибка:
java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2

Android 6

С выходом Android 6 механизм подтверждения поменялся. Теперь при установке приложения пользователь больше не видит списка запрашиваемых разрешений. Приложение автоматически получает все требуемые normal разрешения, а dangerous разрешения необходимо будет программно запрашивать в процессе работы приложения.

Т.е. теперь недостаточно просто указать в манифесте, что вам нужен, например, доступ к контактам. Когда вы в коде попытаетесь запросить список контактов, то получите ошибку SecurityException: Permission Denial. Потому что вы явно не запрашивали это разрешение, и пользователь его не подтверждал.

Перед выполнением операции, требующей разрешения, необходимо спросить у системы, есть ли у приложения разрешение на это. Т.е. подтверждал ли пользователь, что он дает приложению это разрешение. Если разрешение уже есть, то выполняем операцию. Если нет, то запрашиваем это разрешение у пользователя.

Давайте посмотрим, как это выглядит на практике.

Проверка текущего статуса разрешения выполняется методом checkSelfPermission

int permissionStatus = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS);

На вход метод требует Context и название разрешения. Он вернет константу PackageManager.PERMISSION_GRANTED (если разрешение есть) или PackageManager.PERMISSION_DENIED (если разрешения нет).

Если разрешение есть, значит мы ранее его уже запрашивали, и пользователь подтвердил его. Можем получать список контактов, система даст нам доступ.

Если разрешения нет, то нам надо его запросить. Это выполняется методом requestPermissions. Схема его работы похожа на метод startActivityForResult. Мы вызываем метод, передаем ему данные и request code, а ответ потом получаем в определенном onResult методе.

Добавим запрос разрешения к уже имеющейся проверке.

int permissionStatus = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS);

if (permissionStatus == PackageManager.PERMISSION_GRANTED) {
   readContacts();
} else {
   ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS},
           REQUEST_CODE_PERMISSION_READ_CONTACTS);
}

Проверяем разрешение READ_CONTACTS. Если оно есть, то читаем контакты. Иначе запрашиваем разрешение READ_CONTACTS методом requestPermissions. На вход метод требует Activity, список требуемых разрешений, и request code. Обратите внимание, что для разрешений используется массив. Т.е. вы можете запросить сразу несколько разрешений.

После вызова метода requestPermissions система покажет следующий диалог

Здесь будет отображено разрешение, которое мы запросили методом requestPermissions. Пользователь может либо подтвердить его (ALLOW), либо отказать (DENY). Если будет запрошено сразу несколько разрешений, то на каждое из них будет показан отдельный диалог. И пользователь может какие-то разрешения подтвердить, а какие-то нет.

Решение пользователя мы получим в методе onRequestPermissionsResult

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
   switch (requestCode) {
       case REQUEST_CODE_PERMISSION_READ_CONTACTS:
           if (grantResults.length > 0
                   && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
               // permission granted
               readContacts();
           } else {
               // permission denied
           }
           return;
   }
}

Проверяем, что requestСode тот же, что мы указывали в requestPermissions. В массиве permissions придут название разрешений, которые мы запрашивали. В массиве grantResults придут ответы пользователя на запросы разрешений.

Мы проверяем, что массив ответов не пустой и берем первый результат из него (т.к. мы запрашивали всего одно разрешение). Если пользователь подтвердил разрешение, то выполняем операцию. Если же пользователь отказал, то дальнейшие действия зависят от логики вашего приложения.

В итоге схема получения разрешения состоит из трех действий:
— проверка текущего состояния разрешения
— запрос на получение разрешения, если оно еще не было получено
— обработка ответа на запрос

Далее поговорим про некоторые дополнительные возможности, нюансы и прочие мелочи.

Манифест

При использовании новой схемы разрешений вам все равно необходимо указывать разрешение в манифесте. Если его там не указать и сделать запрос на это разрешение, то вам просто сразу придет отказ без всякого диалога.

Всегда проверяйте разрешение

Каждый раз (а не только первый) перед выполнением операции, требующей определенного разрешения, необходимо проверять, что это разрешение есть. Потому что, даже если пользователь уже давал это разрешение, он всегда может зайти в настройки приложения и отменить его. И если вы после этого не выполните проверку, то получите ошибку при выполнении операции.

Don’t ask again

Когда вы первый раз делаете запрос на какое-либо разрешение, пользователь может отказать. При последующих запросах этого же разрешения, в диалоге появится чекбокс Don’t ask again

Если пользователь включит этот чекбокс, то при последующих ваших запросах диалог не будет отображаться, а в onRequestPermissionsResult сразу будет приходить отказ.

Объяснение для пользователя

Когда вы запрашиваете разрешение, пользователю должно быть очевидно, зачем приложению понадобилось это разрешение, и у него не должно возникать вопросов. Но случаи бывают разные, и вы можете решить, что вам надо явно объяснить пользователю, почему приложению понадобилось это разрешение.

Диалог, который показывается при запросе разрешения, — системный, вы не можете менять его содержимое и добавлять туда свой текст. Но вы можете сделать свой диалог или что-то подобное и показать его перед тем, как будете делать запрос разрешения.

Есть метод shouldShowRequestPermissionRationale, который может быть полезен в данной ситуации. Передаете ему название разрешения, а он вам в виде boolean ответит, надо ли показывать объяснение для пользователя.

Т.е. вы сначала проверяете наличие разрешения. Если его нет, то вызываете shouldShowRequestPermissionRationale, чтобы решить, надо ли показывать объяснение пользователю. Если не надо, то делаете запрос разрешения. А если надо, то показываете ваш диалог с объяснением, а после этого диалога делаете запрос разрешения.

Алгоритм работы метода shouldShowRequestPermissionRationale прост.

Если вы еще ни разу не запрашивали это разрешение, то он вернет false. Т.е. перед первым запросом разрешения ничего объяснять не надо.

Если вы ранее уже запрашивали это разрешение и пользователь отказал, то метод вернет true. Т.е. пользователь не понимает, почему он должен давать это разрешение, и надо ему это объяснить.

Если пользователь ставил галку Don’t ask again, то метод вернет false. Запрос полномочий все равно не будет выполнен. Объяснять что-то не имеет смысла.

Разумеется, вы можете показывать дополнительную информацию согласно вашим правилам и не использовать метод shouldShowRequestPermissionRationale.

Группы

Dangerous разрешения собраны в группы. Список групп можно посмотреть здесь. Если вы запросили одно разрешение из группы и пользователь предоставил вам его, то вы автоматически получаете все разрешения этой группы.

Например, разрешения READ_CONTACTS и WRITE_CONTACTS принадлежат группе CONTACTS. И если пользователь уже подтверждал разрешение на READ_CONTACTS, то при проверке WRITE_CONTACTS вы получите PERMISSION_GRANTED.

Android 6 и targetSdkVersion 23

Схема работы разрешений зависит от версии Android, на которой запущено приложение и от параметра targetSdkVersion приложения.

Новая схема будет работать, если версия Android >= 6 И targetSdkVersion >= 23.

В остальных случаях, т.е. когда targetSdkVersion < 23 ИЛИ версия Android < 6, разрешения будут работать по старому. Т.е. пользователь будет подтверждать их сразу все при установке. Если в приложении есть код, который проверяет разрешения, то он будет получать PERMISSION_GRANTED.

Но учитывайте, что в Android версии 6 и выше, пользователь может отменить разрешения в настройках приложения.

Intent

Не забывайте, что иногда для работы с контактами, камерой и т.п., вы можете использовать Intent и уже установленные приложения. В этом случае вам не придется писать лишний код и запрашивать разрешения для работы с этими ресурсами.


Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance 

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня


I have an android application that i need to receive sms and I found a certain tutorial that teaches how to do that but when I run it & I get android permission exception

FATAL EXCEPTION: main
Process: androidreceivesms.javapapers.com.smsbroadcastreceiver, PID:
12206
java.lang.RuntimeException: Unable to start activity
ComponentInfo{androidreceivesms.javapapers.com.smsbroadcastreceiver/androidreceivesms.javapapers.com.smsbroadcastreceiver.SmsActivity}:
java.lang.SecurityException: Permission Denial: reading
com.android.providers.telephony.SmsProvider uri content://sms/inbox
from pid=12206, uid=10061 requires android.permission.READ_SMS, or
grantUriPermission()
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.SecurityException: Permission Denial: reading
com.android.providers.telephony.SmsProvider uri content://sms/inbox
from pid=12206, uid=10061 requires android.permission.READ_SMS, or
grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1599)
at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at
android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
at android.content.ContentResolver.query(ContentResolver.java:491)
at android.content.ContentResolver.query(ContentResolver.java:434)
at
androidreceivesms.javapapers.com.smsbroadcastreceiver.SmsActivity.refreshSmsInbox(SmsActivity.java:52)
at
androidreceivesms.javapapers.com.smsbroadcastreceiver.SmsActivity.onCreate(SmsActivity.java:47)
at android.app.Activity.performCreate(Activity.java:6237)
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Here is my AndroidManifest.xml file:

<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".SmsActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name=".SmsBroadcastReceiver" android:exported="true" >
        <intent-filter android:priority="999" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
</application>

Here is my SmsActivity.java

public class SmsActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

private static SmsActivity inst;
ArrayList<String> smsMessagesList = new ArrayList<String>();
ListView smsListView;
ArrayAdapter arrayAdapter;

public static SmsActivity instance() {
    return inst;
}

@Override
public void onStart() {
    super.onStart();
    inst = this;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sms);
    smsListView = (ListView) findViewById(R.id.SMSList);
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, smsMessagesList);
    smsListView.setAdapter(arrayAdapter);
    smsListView.setOnItemClickListener(this);

    refreshSmsInbox();
}

public void refreshSmsInbox() {
    ContentResolver contentResolver = getContentResolver();
    Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null);
    int indexBody = smsInboxCursor.getColumnIndex("body");
    int indexAddress = smsInboxCursor.getColumnIndex("address");
    if (indexBody < 0 || !smsInboxCursor.moveToFirst()) return;
    arrayAdapter.clear();
    do {
        String str = "SMS From: " + smsInboxCursor.getString(indexAddress) +
                "n" + smsInboxCursor.getString(indexBody) + "n";
        arrayAdapter.add(str);
    } while (smsInboxCursor.moveToNext());
}

public void updateList(final String smsMessage) {
    arrayAdapter.insert(smsMessage, 0);
    arrayAdapter.notifyDataSetChanged();
}

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
    try {
        String[] smsMessages = smsMessagesList.get(pos).split("n");
        String address = smsMessages[0];
        String smsMessage = "";
        for (int i = 1; i < smsMessages.length; ++i) {
            smsMessage += smsMessages[i];
        }

        String smsMessageStr = address + "n";
        smsMessageStr += smsMessage;
        Toast.makeText(this, smsMessageStr, Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

Here is my SmsBroadcastReceiver.java

public class SmsBroadcastReceiver extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";

public void onReceive(Context context, Intent intent) {
    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {
        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        String smsMessageStr = "";
        for (int i = 0; i < sms.length; ++i) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

            String smsBody = smsMessage.getMessageBody().toString();
            String address = smsMessage.getOriginatingAddress();

            smsMessageStr += "SMS From: " + address + "n";
            smsMessageStr += smsBody + "n";
        }
        Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();

        //this will update the UI with message
        SmsActivity inst = SmsActivity.instance();
        inst.updateList(smsMessageStr);
    }
}

}

Can anyone please help me because i have been stack here for a long time now? Any help will be appreciated thanks

@JuanEstrellaM @mykola-mokhnach

I am still facing the same error, with my phone (Realme X), i have follwed the below steps
First Enable Developer Option second step enable USB Debugging
And very important Step:
Step 3. Search for «Disable Permission Monitoring» and Enable it.

image
image

eclipse error log:
below error i am recived after follwing above steps:

java.lang.reflect.InvocationTargetException
Unable to create a new remote session. Please check the server log for more details. Original error: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
at getResponseForW3CError (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolerrors.js:804:9)
at asyncHandler (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolprotocol.js:381:37)
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
org.openqa.selenium.SessionNotCreatedException: Unable to create a new remote session. Please check the server log for more details. Original error: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
at getResponseForW3CError (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolerrors.js:804:9)
at asyncHandler (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolprotocol.js:381:37)
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:208)
at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:217)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131)
at io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:38)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:84)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:94)
at Calculatortest.CalculatorTest.openCalculator(CalculatorTest.java:44)
at Calculatortest.CalculatorTest.main(CalculatorTest.java:16)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:186)
… 12 more
Caused by: org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘DESKTOP-K5JIG48’, ip: ‘192.168.1.10’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_261’
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.

java.lang.SecurityException: adb clearing user data is forbidden.
at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
at getResponseForW3CError (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolerrors.js:804:9)
at asyncHandler (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-base-driverlibprotocolprotocol.js:381:37)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
… 17 more

CMD run log:

[HTTP] —> POST /wd/hub/session
[HTTP] {«desiredCapabilities»:{«appActivity»:»com.android.calculator2.Calculator»,»appPackage»:»com.coloros.calculator»,»platformVersion»:»10″,»platformName»:»Android»,»udid»:»2af3ce9b»,»deviceName»:»Realme X»},»capabilities»:{«firstMatch»:[{«appium:appActivity»:»com.android.calculator2.Calculator»,»appium:appPackage»:»com.coloros.calculator»,»appium:deviceName»:»Realme X»,»platformName»:»android»,»appium:platformVersion»:»10″,»appium:udid»:»2af3ce9b»}]}}
[debug] [W3C] Calling AppiumDriver.createSession() with args: [{«appActivity»:»com.android.calculator2.Calculator»,»appPackage»:»com.coloros.calculator»,»platformVersion»:»10″,»platformName»:»Android»,»udid»:»2af3ce9b»,»deviceName»:»Realme X»},null,{«firstMatch»:[{«appium:appActivity»:»com.android.calculator2.Calculator»,»appium:appPackage»:»com.coloros.calculator»,»appium:deviceName»:»Realme X»,»platformName»:»android»,»appium:platformVersion»:»10″,»appium:udid»:»2af3ce9b»}]}]
[debug] [BaseDriver] Event ‘newSessionRequested’ logged at 1601963419149 (11:20:19 GMT+0530 (India Standard Time))
[Appium]
[Appium] ======================================================================
[Appium] DEPRECATION WARNING:
[Appium]
[Appium] The ‘automationName’ capability was not provided in the desired
[Appium] capabilities for this Android session
[Appium]
[Appium] Setting ‘automationName=UiAutomator2’ by default and using the
[Appium] UiAutomator2 Driver
[Appium]
[Appium] The next major version of Appium (2.x) will require the
[Appium] ‘automationName’ capability to be set for all sessions on all
[Appium] platforms
[Appium]
[Appium] In previous versions (Appium <= 1.13.x), the default was
[Appium] ‘automationName=UiAutomator1’
[Appium]
[Appium] If you wish to use that automation instead of UiAutomator2, please
[Appium] add ‘automationName=UiAutomator1’ to your desired capabilities
[Appium]
[Appium] For more information about drivers, please visit
[Appium] http://appium.io/docs/en/about-appium/intro/ and explore the
[Appium] ‘Drivers’ menu
[Appium]
[Appium] ======================================================================
[Appium]
[Appium] Appium v1.18.2 creating new AndroidUiautomator2Driver (v1.56.1) session
[debug] [BaseDriver] W3C capabilities and MJSONWP desired capabilities were provided
[debug] [BaseDriver] Creating session with W3C capabilities: {
[debug] [BaseDriver] «alwaysMatch»: {
[debug] [BaseDriver] «platformName»: «android»,
[debug] [BaseDriver] «appium:appActivity»: «com.android.calculator2.Calculator»,
[debug] [BaseDriver] «appium:appPackage»: «com.coloros.calculator»,
[debug] [BaseDriver] «appium:deviceName»: «Realme X»,
[debug] [BaseDriver] «appium:platformVersion»: «10»,
[debug] [BaseDriver] «appium:udid»: «2af3ce9b»
[debug] [BaseDriver] },
[debug] [BaseDriver] «firstMatch»: [
[debug] [BaseDriver] {}
[debug] [BaseDriver] ]
[debug] [BaseDriver] }
[BaseDriver] Session created with session id: 0afbbf37-94f4-4147-996b-980ac0d2ff53
[UiAutomator2] Starting ‘com.coloros.calculator’ directly on the device
[ADB] Found 1 ‘build-tools’ folders under ‘C:UserspriyaAppDataLocalAndroidSdk’ (newest first):
[ADB] C:/Users/priya/AppData/Local/Android/Sdk/build-tools/30.0.2
[ADB] Using ‘adb.exe’ from ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 start-server’
[AndroidDriver] Retrieving device list
[debug] [ADB] Trying to find a connected android device
[debug] [ADB] Getting connected devices
[debug] [ADB] Connected devices: [{«udid»:»2af3ce9b»,»state»:»device»}]
[AndroidDriver] Using device: 2af3ce9b
[ADB] Using ‘adb.exe’ from ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 start-server’
[debug] [ADB] Setting device id to 2af3ce9b
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell getprop ro.build.version.sdk’
[debug] [ADB] Current device property ‘ro.build.version.sdk’: 29
[ADB] Getting device platform version
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell getprop ro.build.version.release’
[debug] [ADB] Current device property ‘ro.build.version.release’: 10
[debug] [ADB] Device API level: 29
[UiAutomator2] Relaxing hidden api policy
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell ‘settings put global hidden_api_policy_pre_p_apps 1;settings put global hidden_api_policy_p_apps 1;settings put global hidden_api_policy 1»
[AndroidDriver] No app sent in, not parsing package/activity
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b wait-for-device’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell echo ping’
[debug] [AndroidDriver] Pushing settings apk to device…
[debug] [ADB] Getting install status for io.appium.settings
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.settings’
[debug] [ADB] ‘io.appium.settings’ is installed
[debug] [ADB] Getting package info for ‘io.appium.settings’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.settings’
[debug] [ADB] The version name of the installed ‘io.appium.settings’ is greater or equal to the application version name (‘3.2.0’ >= ‘3.2.0’)
[debug] [ADB] There is no need to install/upgrade ‘C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesio.appium.settingsapkssettings_apk-debug.apk’
[debug] [ADB] Getting IDs of all ‘io.appium.settings’ processes
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell ‘pgrep —help; echo $?»
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pgrep -f io.appium.settings’
[debug] [ADB] Getting IDs of all ‘io.appium.settings’ processes
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pgrep -f io.appium.settings’
[debug] [ADB] Starting Appium Settings app
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell am start -n io.appium.settings/.Settings -a android.intent.action.MAIN -c android.intent.category.LAUNCHER’
[debug] [ADB] Getting IDs of all ‘io.appium.settings’ processes
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pgrep -f io.appium.settings’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell appops set io.appium.settings android:mock_location allow’
[debug] [Logcat] Starting logs capture with command: C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b logcat -v threadtime
[debug] [UiAutomator2] Forwarding UiAutomator2 Server port 6790 to 8200
[debug] [ADB] Forwarding system: 8200 to device: 6790
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b forward tcp:8200 tcp:6790’
[debug] [ADB] Getting install status for io.appium.uiautomator2.server
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.uiautomator2.server’
[debug] [ADB] ‘io.appium.uiautomator2.server’ is installed
[debug] [ADB] Getting package info for ‘io.appium.uiautomator2.server’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.uiautomator2.server’
[debug] [ADB] The version name of the installed ‘io.appium.uiautomator2.server’ is greater or equal to the application version name (‘4.12.2’ >= ‘4.12.2’)
[debug] [UiAutomator2] io.appium.uiautomator2.server installation state: sameVersionInstalled
[debug] [ADB] Checking app cert for C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-v4.12.2.apk
[ADB] Using ‘apksigner.jar’ from ‘C:UserspriyaAppDataLocalAndroidSdkbuild-tools30.0.2libapksigner.jar’
[debug] [ADB] Starting apksigner: ‘C:Program FilesJavajdk1.8.0_261binjava.exe’ -Xmx1024M -Xss1m -jar C:UserspriyaAppDataLocalAndroidSdkbuild-tools30.0.2libapksigner.jar verify —print-certs C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-v4.12.2.apk
[debug] [ADB] apksigner stdout: Signer #1 certificate DN: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
[debug] [ADB] Signer #1 certificate SHA-256 digest: a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc
[debug] [ADB] Signer #1 certificate SHA-1 digest: 61ed377e85d386a8dfee6b864bd85b0bfaa5af81
[debug] [ADB] Signer #1 certificate MD5 digest: e89b158e4bcf988ebd09eb83f5378e87
[debug] [ADB]
[debug] [ADB] ‘C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-v4.12.2.apk’ is signed with the default certificate
[debug] [ADB] Getting install status for io.appium.uiautomator2.server.test
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package io.appium.uiautomator2.server.test’
[debug] [ADB] ‘io.appium.uiautomator2.server.test’ is installed
[debug] [ADB] Checking app cert for C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-debug-androidTest.apk
[debug] [ADB] Starting apksigner: ‘C:Program FilesJavajdk1.8.0_261binjava.exe’ -Xmx1024M -Xss1m -jar C:UserspriyaAppDataLocalAndroidSdkbuild-tools30.0.2libapksigner.jar verify —print-certs C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-debug-androidTest.apk
[debug] [ADB] apksigner stdout: Signer #1 certificate DN: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
[debug] [ADB] Signer #1 certificate SHA-256 digest: a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc
[debug] [ADB] Signer #1 certificate SHA-1 digest: 61ed377e85d386a8dfee6b864bd85b0bfaa5af81
[debug] [ADB] Signer #1 certificate MD5 digest: e89b158e4bcf988ebd09eb83f5378e87
[debug] [ADB]
[debug] [ADB] ‘C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesappium-uiautomator2-serverapksappium-uiautomator2-server-debug-androidTest.apk’ is signed with the default certificate
[UiAutomator2] Server packages are not going to be (re)installed
[debug] [UiAutomator2] Waiting up to 30000ms for services to be available
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm list instrumentation’
[debug] [UiAutomator2] Instrumentation target ‘io.appium.uiautomator2.server.test/androidx.test.runner.AndroidJUnitRunner’ is available
[debug] [UiAutomator2] No app capability. Assuming it is already on the device
[debug] [ADB] Getting install status for com.coloros.calculator
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell dumpsys package com.coloros.calculator’
[debug] [ADB] ‘com.coloros.calculator’ is installed
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell am force-stop com.coloros.calculator’
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’
[debug] [UiAutomator2] Deleting UiAutomator2 session
[debug] [UiAutomator2] Deleting UiAutomator2 server session
[debug] [WD Proxy] Matched ‘/’ to command name ‘deleteSession’
[UiAutomator2] Did not get confirmation UiAutomator2 deleteSession worked; Error was: UnknownError: An unknown server-side error occurred while processing the command. Original error: Trying to proxy a session command without session id
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell am force-stop com.coloros.calculator’
[debug] [Logcat] Stopping logcat capture
[debug] [ADB] Removing forwarded port socket connection: 8200
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b forward —remove tcp:8200’
[UiAutomator2] Restoring hidden api policy to the device default configuration
[debug] [ADB] Running ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell ‘settings delete global hidden_api_policy_pre_p_apps;settings delete global hidden_api_policy_p_apps;settings delete global hidden_api_policy»
[debug] [BaseDriver] Event ‘newSessionStarted’ logged at 1601963425198 (11:20:25 GMT+0530 (India Standard Time))
[debug] [W3C] Encountered internal error running command: Error executing adbExec. Original error: ‘Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255′; Stderr: ‘Security exception: adb clearing user data is forbidden.
[debug] [W3C]
[debug] [W3C] java.lang.SecurityException: adb clearing user data is forbidden.
[debug] [W3C] at com.android.server.pm.ColorClearDataProtectManager.interceptClearUserDataIfNeeded(ColorClearDataProtectManager.java:88)
[debug] [W3C] at com.android.server.pm.OppoBasePackageManagerService$OppoPackageManagerInternalImpl.interceptClearUserDataIfNeeded(OppoBasePackageManagerService.java:733)
[debug] [W3C] at com.android.server.am.ActivityManagerService.clearApplicationUserData(ActivityManagerService.java:4459)
[debug] [W3C] at com.android.server.pm.PackageManagerShellCommand.runClear(PackageManagerShellCommand.java:1837)
[debug] [W3C] at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:212)
[debug] [W3C] at android.os.ShellCommand.exec(ShellCommand.java:104)
[debug] [W3C] at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:23997)
[debug] [W3C] at android.os.Binder.shellCommand(Binder.java:881)
[debug] [W3C] at android.os.Binder.onTransact(Binder.java:765)
[debug] [W3C] at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5100)
[debug] [W3C] at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4795)
[debug] [W3C] at com.android.server.pm.OppoPackageManagerService.onTransact(OppoPackageManagerService.java:83)
[debug] [W3C] at android.os.Binder.execTransactInternal(Binder.java:1021)
[debug] [W3C] at android.os.Binder.execTransact(Binder.java:994)’; Code: ‘255’
[debug] [W3C] Error: Command ‘C:UserspriyaAppDataLocalAndroidSdkplatform-toolsadb.exe -P 5037 -s 2af3ce9b shell pm clear com.coloros.calculator’ exited with code 255
[debug] [W3C] at ChildProcess. (C:UserspriyaAppDataRoamingnpmnode_modulesappiumnode_modulesteen_processlibexec.js:113:19)
[debug] [W3C] at ChildProcess.emit (events.js:315:20)
[debug] [W3C] at maybeClose (internal/child_process.js:1021:16)
[debug] [W3C] at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
[debug] [W3C] Destroying socket connection
[HTTP] <— POST /wd/hub/session 500 6237 ms — 3879
[HTTP]

Program Code:

package Calculatortest;

import java.net.URL;

import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;

public class CalculatorTest {

static AppiumDriver <MobileElement> driver;

public static void main(String[] args) {
	try {
		openCalculator();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		
		System.out.println(e.getCause());
		System.out.println(e.getMessage());
		e.printStackTrace();
	}
	
}
	// TODO Auto-generated method stub
	
	public static void openCalculator() throws Exception
	{
	
	DesiredCapabilities cap= new DesiredCapabilities();
	//cap.setCapability("deviceName", "OPPO F1s X");
	cap.setCapability("deviceName", "Realme X");
	//cap.setCapability("udid", "JR55OVOV99999999");
	cap.setCapability("udid", "2af3ce9b");
	cap.setCapability("platformName", "Android");
	cap.setCapability("platformVersion", "10");
	cap.setCapability("appPackage", "com.coloros.calculator");
	cap.setCapability("appActivity", "com.android.calculator2.Calculator");
	//cap.setCapability("appPackage", "com.qaddoo");
			//cap.setCapability("appActivity", "com.Qaddoo.mvvm.ui.activities.MainActivity");
	
	URL url = new URL("http://127.0.0.1:4723/wd/hub");
	driver =new AppiumDriver<MobileElement>(url, cap);

System.out.println(«Application started»);
}

}

Kinldly help

Вопрос:

Я создал приложение, содержащее действие GWVectraNotifier, которое вызывается из других приложений для отображения Уведомления.

В диалоговом окне “Уведомление” появится кнопка “показать” и “закрыть”.

При нажатии кнопки “показать” начнется соответствующее действие.

Чтобы проверить функциональность вышеуказанного приложения,

Я начал работу GWVectraNotifier из приложения K9Mail при запуске события checkmail.

Я могу успешно запустить действие GWVectraNotifier, но при нажатии кнопки “показать” мне нужно будет запустить “MessageList” активность K9mail. Для этого я написал код ниже:

Intent i = new Intent();
i.setComponent(new ComponentName("com.fsck.k9", "com.fsck.k9.activity.MessageList"));
i.putExtra("account", accUuid);
i.putExtra("folder", accFolder);
startActivity(i);

который бросает:

WARN/ActivityManager(59): Permission denied: checkComponentPermission() reqUid=10050
WARN/ActivityManager(59): Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675):     at android.os.Parcel.readException(Parcel.java:1247)
WARN/System.err(675):     at android.os.Parcel.readException(Parcel.java:1235)
WARN/System.err(675):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1298)
WARN/System.err(675):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
WARN/System.err(675):     at android.app.Activity.startActivityForResult(Activity.java:2817)
WARN/System.err(675):     at android.app.Activity.startActivity(Activity.java:2923)
WARN/System.err(675):     at com.i10n.notifier.GWVectraNotifier$2$1.run(GWVectraNotifier.java:63)
WARN/System.err(675):     at android.app.Activity.runOnUiThread(Activity.java:3707)
WARN/System.err(675):     at com.i10n.notifier.GWVectraNotifier$2.onClick(GWVectraNotifier.java:53)
WARN/System.err(675):     at android.view.View.performClick(View.java:2408)
WARN/System.err(675):     at android.view.View$PerformClick.run(View.java:8816)
WARN/System.err(675):     at android.os.Handler.handleCallback(Handler.java:587)
WARN/System.err(675):     at android.os.Handler.dispatchMessage(Handler.java:92)
WARN/System.err(675):     at android.os.Looper.loop(Looper.java:123)
WARN/System.err(675):     at android.app.ActivityThread.main(ActivityThread.java:4627)
WARN/System.err(675):     at java.lang.reflect.Method.invokeNative(Native Method)
WARN/System.err(675):     at java.lang.reflect.Method.invoke(Method.java:521)
WARN/System.err(675):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
WARN/System.err(675):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
WARN/System.err(675):     at dalvik.system.NativeStart.main(Native Method)

На самом деле я не могу понять, какие разрешения включить в файл манифеста приложения Notifier для доступа к MessageList для k9Mail. Я вставляю ниже разрешений, включенных в файл манифеста приложения k9mail:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"/>
<permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/read_attachment_label"
android:description="@string/read_attachment_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"/>
<permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/remote_control_label"
android:description="@string/remote_control_desc"/>
<uses-permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"/>
<permission android:name="com.fsck.k9.permission.READ_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/read_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_MESSAGES"/>
<permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/delete_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"/>

Может кто-нибудь сказать мне, какое разрешение включить в мое приложение? В приведенных выше разрешениях некоторые из них относятся только к k9mail, потому что это классы разрешений, написанные для k9. Таким образом, я только смогу включить встроенные разрешения android в указанные выше разрешения. Я тоже попытался сделать это, но это не решило мою проблему:(

Ответ №1

Вы должны добавить android:exported="true" в файл манифеста в действии, которое вы пытаетесь запустить.

Из android: экспортированная документация:

Android: экспортироваться
    Независимо от того, может ли эта активность запускаться компонентами других приложений – “true”, если она может быть, и “false” , если нет. Если “false” , активность может запускаться только компонентами одного приложения или приложений с одним и тем же идентификатором пользователя.

Значение по умолчанию зависит от того, содержит ли активность фильтры намерений. Отсутствие каких-либо фильтров означает, что действие может быть вызвано только путем указания его точного имени класса. Это означает, что действие предназначено только для внутреннего использования приложения (так как другие не знают имя класса). Поэтому в этом случае значением по умолчанию является “false” . С другой стороны, наличие по меньшей мере одного фильтра подразумевает, что активность предназначена для внешнего использования, поэтому значение по умолчанию “true”.

Этот атрибут не единственный способ ограничить воздействие активности на другие приложения. Вы также можете использовать разрешение для ограничения внешних объектов, которые могут вызывать действие (см. Атрибут разрешений).

Ответ №2

java.lang.SecurityException, который вы видите, состоит в том, что вы можете ввести две записи, указывающие на одну и ту же активность. Удалите вторую, и вам должно быть хорошо.

Подробнее

Вы можете объявить активность 2 раза в манифесте с различными свойствами, например:

 <activity android:name=".myclass"> </activity>

и

 <activity android:name=".myclass" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Вы должны удалить ненужный из манифеста

Ответ №3

В файле манифеста напишите это перед </application >

<activity android:name="com.fsck.k9.activity.MessageList">
<intent-filter>
<action android:name="android.intent.action.MAIN">
</action>
</intent-filter>
</activity>

и скажите мне, решает ли ваша проблема:)

Ответ №4

Ответ №5

Я столкнулся с той же проблемой и хотел избежать добавления фильтра намерений, как вы описали. После некоторого копания я обнаружил атрибут xml android: exported, который вы должны добавить к активности, которую вы хотите вызвать.

По умолчанию установлено значение false, если в вашу активность не добавлен фильтр намерений, но если у вас есть фильтр намерений, он получает значение true.

вот документация
http://developer.android.com/guide/topics/manifest/activity-element.html#exported

tl; dr: добавьте android:exported="true" в свою активность в файле AndroidManifest.xml и не добавляйте фильтр-замысел:)

Ответ №6

Убедитесь, что для компонента установлен флаг “экспортированный” в значение true.
Также компонент, определяющий разрешение, должен быть установлен перед компонентом, который его использует.

Ответ №7

Я решил это исключение, изменив версию target sdk с 19-й версии kitkat AndroidManifest.xml.

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />

Ответ №8

Возможно, у вас есть ошибка в конфигурации.

Пример: Manifest.xml

введите описание изображения здесь

Но в моей конфигурации есть по умолчанию Activity.Splash

введите описание изображения здесь

вам нужна проверить эту конфигурацию и файл Manifest.xml

Удача

Ответ №9

Моя проблема заключалась в том, что у меня было это:
wrong
Вместо этого:
correct

  • Ошибка java lang reflect undeclaredthrowableexception
  • Ошибка java lang nullpointerexception на андроид
  • Ошибка java io ioexception stalcraft
  • Ошибка java io filenotfoundexception
  • Ошибка java install in progress