Android无法在我的测试手机Pixel XL上安装我的应用程序,从Eclipse移植到Android Studio

时间:2017-11-01 22:47:31

标签: android android-studio debugging installation

我已经为朋友的公司维护了几年的应用程序。当他们最近从Android 5更新到Android 7时,该应用程序停止了工作。所以我移植到Android Studio并开始修复东西。现在,在挤出一堆bug之后,我无法在我的测试手机上安装应用程序,这是一台运行Android 8的Pixel XL。它运行调试图像,直到我卸载它,所以我可以测试安装。 (我认为那是因为Instant Run。)

现在我得到以下内容:

$ adb install-multiple -r -t I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_0.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_1.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_7.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_4.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_5.apk I:\Users\...\app\build\intermediates\split-apk\debug\dep\dependencies.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_6.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_3.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_8.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_2.apk I:\Users\...\app\build\intermediates\split-apk\debug\slices\slice_9.apk I:\Users\...\app\build\outputs\apk\debug\app-debug.apk 
Split APKs installed

$ adb shell am start -n "com.pbs.deliverytrack1/com.pbs.deliverytrack1.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
    Error while executing: am start -n "com.pbs.deliverytrack1/com.pbs.deliverytrack1.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
    Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.pbs.deliverytrack1/.MainActivity }
    Error type 3
    Error: Activity class {com.pbs.deliverytrack1/com.pbs.deliverytrack1.MainActivity} does not exist.

    Error while Launching activity

com.pbs.deliverytrack1 / com.pbs.deliverytrack1.MainActivity看起来是否正确?

附加说明: 我能够在运行Nougat 7.0的Samsung Edge 7.0上通过电子邮件安装apk。我仍然无法安装在运行Oreo 8.0的Google Pixel XL上。

我已经尝试过我能想到的构建版本的每个组合。关键,我认为是在错误消息中:

$ adb shell am start -n "com.pbs.deliverytrack1/com.pbs.deliverytrack1.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
Error while executing: am start -n "com.pbs.deliverytrack1/com.pbs.deliverytrack1.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.pbs.deliverytrack1/.MainActivity }
Error type 3
Error: Activity class {com.pbs.deliverytrack1/com.pbs.deliverytrack1.MainActivity} does not exist.

在以下部分中说:cmp = com.pbs.deliverytrack1 / .MainActivity,那应该是com.pbs.deliverytrack1 / com.pbs.deliverytrack1.MainActivity吗?

更新 在搞乱了minSDK,maxSDK和targetSDK,以及三个不同版本的Android:7.0,7.1.1和8.0之后,我找到了继续工作的方法。我的客户端使用7.0和7.1.1,所以我构建了一个运行7.0的模拟器,我一直用它来调试我的应用程序。 (实际上是我妻子的建议。)所以我再次前进。

在处理怪异问题时,我也会做我通常做的事情。我将使用-XLint并修复我能找到的每个警告。 (当你无法修复你想要的bug时,宝贝,修复你得到的bug。)除了清理一些长期存在的问题之外,我希望它最终会导致这个bug的挤压。

感谢大家的帮助和建议。我将这个开放一点,看看有人想出一个奇迹。我更愿意奖励赏金,而不仅仅是让它进入比特桶。 :)

所以,再一次,我谦卑地寻求帮助。谢谢,Ray

4 个答案:

答案 0 :(得分:7)

与评论中提到的CommonsWare一样,看起来您的应用程序正在安装,但它无法启动。我可以想到要检查的两件事:

  1. 确保您的AndroidManifest.xml文件列出MainActivity的正确完全限定类名。如果不正确,那么您的应用会安装,但在启动时会崩溃,并且抱怨无法找到您的MainActivity
  2. 如果您正在使用ProGuard,请检查以确保您的规则已设置,以便ProGuard不会从您的APK中剥离MainActivity课程。许多开发人员只是ProGuard他们的非调试版本,你提到你的调试版本工作正常,所以这可能是一个暗示。
  3. 编辑:我可以想到一个。如果您要更改applicationId debug中的buildType,则需要在adb am start命令中指定相同的ID。

答案 1 :(得分:3)

如果无效,请尝试在Android Studio中创建一个新项目,其中包含所有正确的信息(例如相同的包名称,与Android设备的兼容性),在创建第一个活动时,复制Java中的所有内容和来自旧项目的XML布局文件。创建另一个活动(例如,如果您的Eclipse项目中有DrawerActivity,请在Android Studio中创建另一个DrawerActivity。这可能会有效。

我不确定这是否有效,但 是更容易的选择。 首先,复制旧项目的Resources文件夹中的所有内容,将所有Java文件复制到新项目,并且由于需要定义Activities,请复制AndroidManifest.xml到你的新应用程序。

希望这有帮助!

答案 2 :(得分:3)

现在Android和Android-8Android-7.1Android-7

都有很多变化

因此,如果你使用后台服务,那么你需要为Android 7,7.1,8添加额外的Job scheduling

Nougat Behavior change

Oreo Behavior change

更新Android SDK Build-Tools 27.0.1

您可以更改模块应用 Gradle文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.example.package"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

支持模拟器

更新Sdk Android-7,7.1,8。用于创建本地模拟器 文件菜单 - >设置 - >外观&行为 - >系统设置 - > Android Sdk

答案 3 :(得分:2)

我可以建议以下几点: 1)正如上面的一些评论中已经建议的那样,我希望你已经禁用了“即时运行”(打开设置或首选项对话框。导航到构建,执行,部署>即时运行&取消勾选旁边的框启用即时运行) 2)在AS中,转到文件 - >使缓存无效并重新启动 3)请尝试Gradle Clean&然后构建(应用程序级别,从右侧Gradle菜单选项)

&安培;你可以告诉你当前正在使用哪个Android Studio版本吗?