从Android 8升级到9后,无法从Android Studio启动应用程序

4

我删除并重新发布了我的问题,因为我认为已经解决并标记了它,但实际上没有,现在我正在添加更多关于它的信息。

我正在开发一款安卓应用,在将设备的安卓版本更新为9之后,我无法再从Android Studio中运行我的应用程序。

在事件日志中看到两个不同的错误:

第一个(最短):

“app”会话:安装失败。安装失败

尝试了下面链接中的每个方法,但没有成功:

安装APK时出现“app”会话错误

第二个错误:

Broken pipe java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.write0(Native Method) at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) at sun.nio.ch.IOUtil.write(IOUtil.java:65) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:524) at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:627) at com.android.ddmlib.SplitApkInstaller.uploadApk(SplitApkInstaller.java:133) at com.android.ddmlib.SplitApkInstaller.install(SplitApkInstaller.java:73) at com.android.ddmlib.Device.installPackages(Device.java:927) at com.android.tools.deployer.AdbClient.install(AdbClient.java:75) at com.android.tools.deployer.ApkInstaller.install(ApkInstaller.java:32) at com.android.tools.deployer.Deployer.install(Deployer.java:76) at com.android.tools.idea.run.tasks.DeployTask.perform(DeployTask.java:79) at com.android.tools.idea.run.tasks.AbstractDeployTask.perform(AbstractDeployTask.java:109) at com.android.tools.idea.run.LaunchTaskRunner.run(LaunchTaskRunner.java:132) at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:727) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:164) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:582) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:532) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:87) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:151) at com.intellij.openapi.progress.impl.CoreProgressManager$4.run(CoreProgressManager.java:403) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
我的设备是华为P20,我使用最新的Android Studio 3.4.1和Ubuntu,自从Android 8升级到9后,从Android Studio运行应用程序(启动)就停止工作了。
值得一提的是,在构建过程中,当启动时检测到正确的目标设备并且在logcat查看器中也可以看到设备已连接,但在完成构建后,准备部署时,你会听到电脑插入/拔出USB设备时发出的声音。有什么帮助吗?

编辑1:

我一开始认为这是一个操作系统问题(Ubuntu),因为恢复了最近的虚拟机备份后,它可以正常工作,但在更新Android Studio和SDK(如建议所述)后,又开始出现故障,所以我推测这应该是由于我的设备OS Android 9和最新的SDK更新之间的某种相互作用引起的。

在“失败”的虚拟机中,我可以在旧的Android 4手机和我的4.4.3华硕平板电脑上运行应用程序,但不能在我的新Android 9设备上运行,这就是我猜测可能与Android 9相关的问题所在。

这是我的AndroidManifest.xml文件。

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

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

    <application
        android:name=".activities.shared.AppSettings"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/Theme.myTheme.TitleBar">
        <service
            android:name=".activities.shared.OnClearFromRecentService"
            android:stopWithTask="false"
            android:enabled="true"
            android:exported="true">
        </service>

        <provider
            android:name=".activities.shared.GenericFileProvider"
            android:authorities="${applicationId}.testMe.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

        <activity
            android:name=".activities.launch.SplashActivity"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".activities.main.MainActivity"
            android:configChanges="orientation"
            android:parentActivityName=".activities.launch.SplashActivity">
        </activity>
        <activity
            android:name=".activities.about.AboutUsActivity"
            android:parentActivityName=".activities.main.MainActivity">
        </activity>
        <activity
            android:name=".activities.about.ChangeLogActivity"
            android:parentActivityName=".activities.about.AboutUsActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.xxx.xxx.activities.about.AboutUsActivity"/>
        </activity>
        <activity
            android:name=".activities.about.ReportProblemActivity"
            android:parentActivityName=".activities.about.AboutUsActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.xxx.xxx.activities.about.AboutUsActivity"/>
        </activity>
        <activity
            android:name=".activities.main.HowToUseActivity"
            android:parentActivityName=".activities.main.MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.xxx.xxx.activities.main.MainActivity"/>
        </activity>
        <activity
            android:name=".activities.DisplayThoughtActivity"
            android:parentActivityName=".activities.main.MainActivity">
        </activity>
        <activity
            android:name=".activities.shared.SettingsActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="Settings">
        </activity>

        <receiver android:name=".helpers.notification.AlarmTakeTestReceiver"/>
    </application>

</manifest>

这是我的 build.gradle 文件:
apply plugin: 'com.android.application'
android {
    compileSdkVersion 28
    buildToolsVersion '29.0.0'
    def code
    Properties versionProps = new Properties()
    def versionPropsFile = file('version.properties')
    if (versionPropsFile.exists())
        versionProps.load(new FileInputStream(versionPropsFile))
    code = (versionProps['VERSION_CODE'] ?: "0").toInteger() + 1
    versionProps['VERSION_CODE'] = code.toString()
    versionProps.store(versionPropsFile.newWriter(), null)
    packagingOptions {
        pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
    }
    defaultConfig {
        applicationId 'com.xxx.xxx'
        minSdkVersion 17
        targetSdkVersion 28
        versionCode code
        versionName "1.0." + code
        multiDexEnabled true
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    project.ext { appName = 'xxx' }
                    def newName = 'xxx.apk'
                    outputFileName = new File("./build/", newName)
                    //def newName = output.outputFile.name //output.packageApplication.outputFile
                    //newName = newName.replace("app-", "$project.ext.appName-")
                    //newName = newName.replace("-release", "")
                }
            }
        }
        debug {
        }
    }
    allprojects {
        repositories {
            jcenter()
            mavenCentral()
            def androidHome = System.getenv("ANDROID_HOME")
            maven {
                url "$androidHome/extras/android/m2repository/"
            }
            maven {
                url "https://maven.java.net/content/groups/public/"
            }
        }
    }
    productFlavors {
    }
}

dependencies {
    //Google Guava
    api 'com.google.guava:guava:28.0-android'
    //writingminds
    api 'com.writingminds:FFmpegAndroid:0.3.2'
    //JavaCV video
    api group: 'org.bytedeco', name: 'javacv', version: '1.5'
    //api group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '4.1-1.4.4', classifier: 'android-arm'
    //api group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '4.0.1-1.4.4', classifier: 'android-arm'
    //volley
    api 'com.android.volley:volley:1.1.1'
    //spotify
    api 'com.github.kaaes:spotify-web-api-android:0.4.1'
    //mail API 19
    //api 'com.sun.mail:android-mail:1.6.3'
    //api 'com.sun.mail:android-activation:1.6.3'
    //mail API 16
    api 'com.sun.mail:android-mail:1.5.6'
    api 'com.sun.mail:android-activation:1.5.6'
    //apache commons lang
    api 'org.apache.commons:commons-lang3:3.8.1'
    //Font Selector List Preference
    api 'com.vanniktech:vntfontlistpreference:1.0.0'
    //Rate my app
    api 'com.github.hotchemi:android-rate:1.0.1'
    //Support
    api 'com.android.support:appcompat-v7:28.0.0'
    api 'com.android.support:support-v4:28.0.0'
    /*api 'com.android.support:support-v4:28.0.0'
    api 'com.android.support:appcompat-v7:28.0.0'
    api 'com.android.support:cardview-v7:28.0.0'
    api 'com.android.support:recyclerview-v7:28.0.0'
    api 'com.android.support:customtabs:28.0.0'
    api 'com.android.support:support-annotations:28.0.0'*/
    //multidex
    api 'com.android.support:multidex:1.0.3'
    //AlertDialog
    implementation 'com.github.d-max:spots-dialog:1.1@aar'
    //glide animated gifs
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

编辑2:

尝试运行我另一个正常工作的应用程序,构建成功后即将部署apk时出现以下错误:

安装失败并显示此消息:“cmd package install-create -r -t -S 11182369”返回错误“未知故障: 安全异常: 权限拒绝: runInstallCreate from pm command asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL java.lang.SecurityException: Permission Denial: runInstallCreate from pm command asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL at com.android.server.am.UserController.handleIncomingUser(UserController.java:1827) at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:25069) at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:4848) at com.android.server.pm.PackageManagerShellCommand.translateUserId(PackageManagerShellCommand.java:2402) at com.android.server.pm.PackageManagerShellCommand.doCreateSession(PackageManagerShellCommand.java:2408) at com.android.server.pm.PackageManagerShellCommand.runInstallCreate(PackageManagerShellCommand.java:949)

1个回答

3

这是一个奇怪的问题,在SO上已经讨论过几次,特别是在新更新到Android 9的设备上发生。

您尝试禁用然后重新启用开发人员选项了吗?(然后可能需要重新启动设备?)这似乎已经为一些人解决了问题。

如果这样做不起作用,您可能需要查看以下内容并从那里开始 -

Android Pie - 9 (API 28):安装APK....未成功安装

Permission Denial:startActivity要求以用户-2的身份运行,但是从用户0调用;这需要android.permission.INTERACT_ACROSS_USERS_FULL


非常感谢@Vinay Wadhwa,我很感激你的帮助。我已经多次禁用和重新启用开发者选项并重启手机,但是一旦下班回来,我会立即检查你发布的另外两个链接并告诉你结果。我真心希望它们能够帮到我,因为我对这个问题几乎绝望了。 - Diego Perez
欢迎您。请告诉我们它对您有何帮助。 - Vinay W
亲爱的@Vinay Wadhwa,你就是那个人!只需要检查第一个链接就足够了。在众多建议中,其中之一是在gradle中重命名applicationId,这是解决我的问题的关键。仍然是一个奇怪的问题,但是我花了很多时间去解决,所以现在我需要休息了。非常感谢你。 - Diego Perez
我取消了问题的正确标记(昨天标记为正确),因为我匆忙回答,但问题并没有解决@Vinay Wadhwa。更改applicationId的建议是有效的,但这不是真正的解决方案,因为我的一个应用程序已经发布在Google Play上,我不能(也不想)修改它的appId,那么既然我们知道appId“是罪魁祸首”,还有什么其他尝试的方法呢? - Diego Perez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接