Apk在Lolipop上运行良好,但不在果冻豆和棉花糖上
问题描述:
当我使用我的手机与android棒棒糖时,我所有的功能都很好用,但是当我使用Android Marshmallow或Jelly Bean应用程序崩溃时。Apk在Lolipop上运行良好,但不在果冻豆和棉花糖上
以下为应用模块构建gradle这个文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
defaultConfig {
applicationId "com.example.k.sms"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
}
,这是我的logcat当我测试我的应用程序在仿真器与Android棉花糖
12-26 19:10:41.860 18000-18000/com.example.k.sms D/AndroidRuntime: Shutting down VM
12-26 19:10:41.860 18000-18000/com.example.k.sms E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.k.sms, PID: 18000
java.lang.SecurityException: Sending SMS message: uid 10057 does not have android.permission.SEND_SMS.
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768)
at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:310)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:293)
at com.example.k.sms.MainActivity$3.onClick(MainActivity.java:149)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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)
答
targetSdkVersion 23
and
java.lang.SecurityException:发送SMS消息:uid 10057没有android.permission.SEND_SMS。
看来你碰到targetSdk
不知道后果。棉花糖引入了运行时权限模型,当你的目标是API23或更高版本时,它启动运行时权限模型,你的应用程序只需要支持新的运行时权限模型,因为清单声明的权限在这种情况下已经不足够了
快速解决方案是将targetSdk
设置为22
(或更低),因为只有运行时权限不会启动。引用docs:
在Android上的所有版本,应用程序需要声明都正常 并在其应用程序清单的需要,如在声明权限描述 危险的权限。
- 如果设备运行的是Android 5.1或更低,或应用程式的目标 SDK是22或更低:但是, 声明的效力取决于系统的版本和 应用程式的目标SDK级别是不同的:如果您在清单 中列出危险权限,则用户必须在安装 应用时授予权限;如果他们没有授予权限,系统根本不安装 应用程序。
- 如果设备运行的是Android 6.0或更高版本,以及 应用程式的目标SDK为23或更高:应用必须列出清单中的 权限,它必须要求它需要而每一个危险 许可应用正在运行。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,该应用也可以继续以有限的 功能运行。
如果您需要任何年长的API不可用,必须保持targetSdk
23或更高,那么你必须有运行权限的支持,但(也有一些外部库与此帮助)。
答
的棒棒糖提供短信许可清单中和其他较低版本,并添加棉花糖权限检查比棒棒糖更高,因为在Android的
在运行系统中的权限解释堆栈跟踪说什么? – Fllo
在这里一切似乎都很好。可能是其他问题。 –
“崩溃” - 使用LogCat检查与您的崩溃相关的Java堆栈跟踪:https://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this – CommonsWare