我已经为朋友的公司维护了几年的应用程序。当他们最近从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
答案 0 :(得分:7)
与评论中提到的CommonsWare一样,看起来您的应用程序正在安装,但它无法启动。我可以想到要检查的两件事:
AndroidManifest.xml
文件列出MainActivity
的正确完全限定类名。如果不正确,那么您的应用会安装,但在启动时会崩溃,并且抱怨无法找到您的MainActivity
。MainActivity
课程。许多开发人员只是ProGuard他们的非调试版本,你提到你的调试版本工作正常,所以这可能是一个暗示。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-8
,Android-7.1
和Android-7
因此,如果你使用后台服务,那么你需要为Android 7,7.1,8添加额外的Job scheduling
更新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版本吗?