我写了一个应用程序并通过usb调试模式安装在我的手机上, 一切顺利,但当我生成一个签名的apk并将其安装在我的手机上时,会出现两个问题:
安装失败并记录“安装相同的软件包”。所以我删除了“via-usb apps”并重新安装:修复了问题。但!包名称应该与via-usb应用程序相同,应该能够安装“更新”而不是安装失败吗?
安装apk并启动应用程序之后,它崩溃的地方没有崩溃,应用程序安装了“via-usb”,而且不仅有一个bug而且很多!
谁能告诉我该怎么办?我之前使用的是Eclipse,这个Android Studio项目是由其他需要我实现的人创建的,因此我开始使用Android Studio。当然,我为自己创造了一把新钥匙。
[更新]
我刚刚将释放键设置为调试键,然后生成apk(调试)工作顺利就像usb一样,但我发现apk(发布)可以安装但仍然发生在前一个,有没有在密钥旁边的调试和发布apk之间有什么不同?
第一个错误日志:
06-05 10:15:08.700 28362-28362/? E/WindowManager﹕ Activity com.ababab.ui.activity.LoginActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42901978 G.E..... R.....ID 0,0-1026,288} that was originally added here
答案 0 :(得分:0)
问题1):包名称是相同的。签名是不同的(通过usb从Android Studio安装的应用程序可能是使用您的调试密钥签名的调试版本。)
在安装发行版之前卸载调试版是解决问题的方法。
问题2):发布首次出错的logcat。
签名旁边的调试和发布apk之间是否有任何区别?
它取决于build.gradle中的buildTypes部分。但默认情况下,调试版本是可调试的,而版本则不是。另一个常见的区别是proguard只运行构建版本构建(但它实际上取决于你的build.gradle,没有它我们只能提出建议)
答案 1 :(得分:0)
将自动为您more info签署调试版本。当您尝试安装已签名的APK时,它具有相同的应用程序ID,但具有不同的签名密钥。 Android不允许您将应用升级到使用不同密钥作为安全措施的APK。
从logcat / console发布错误。
<强>更新强>
刚刚将释放密钥设置为调试密钥
我不确定为什么这不起作用。
如果您希望能够轻松安装这两个版本我会推荐 使用不同的应用程序ID进行调试构建。
debug {
applicationIdSuffix ".debug"
...
}
这将允许您并排安装两个版本(如果您定义了内容提供商,则需要一些额外的步骤)
现在两个版本在启动器中都具有相同的名称。这可以修复定义构建特定字符串。
// app/src/main/res/values/strings.xml
<string name="app_name">MyApp</string>
// app/src/debug/res/values/strings.xml
<string name="app_name">MyApp.DEBUG</string>
最后在AndroidManifest中使用该值来设置启动器名称。
<application
android:label="@string/app_name"
....
更新2 我最近发现有一种更好的方法可以为不同的构建版本定义应用程序名称。您可以在gradle文件中定义app_name字符串,而不是使用单独的string.xml文件。
release {
resValue "string", "app_name", "MyApp"
}
debug {
applicationIdSuffix ".debug"
resValue "string", "app_name", "MyApp.Debug"
}