Android Studio集成友盟SDK出现的问题解决及原因分析

在集成友盟新的SDK后,调试开发都正常,但在导出release APK时再次出现(以前一篇类似问题的分析博客)以下问题:

Error:Execution failed for task ':app:packageRelease'.
> Unable to compute hash of X:\coding\MyAPP\app\build\intermediates\classes-proguard\release\classes.jar

好吧,有之前那篇博文在,这个完全不是问题,直接翻上面的warning,找到如下问题:

Warning:u.aly.bt: can't find referenced method 'int checkSelfPermission(java.lang.String)' in library class android.content.Context
Warning:there were 1 unresolved references to library class members.
You probably need to update the library versions.
     (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)

是u.aly.bt无法找到这个checkSelfPermission的API,我第一反应是,会不会我把这个API给混淆了?但很显然不可能,context这么多API在调用,不可能光混淆这个函数。
然后就查了一下这个API,定义如下:

public abstract int checkSelfPermission (String permission)

----------
Added in API level 23
----------
Determine whether you have been granted a particular permission.
Parameters
permission
The name of the permission being checked.

Returns
----------
PERMISSION_GRANTED if you have the permission, or PERMISSION_DENIED if not.

原来如此,它是SDKVersion23 也就是Android6.0才添加进来的。用来检查APP是否有这个对应的操作权限,那么为什么要添加这个API呢?因为6.0开始,Android手机也会变得和iOS一样,在一些涉及敏感权限时(如果你的targetSdkVersion是23, 即使你在AndroidManifest.xml里加了这个权限),它也会弹框询问用户是否同意,比如读取IMEI等等,它是用来检查运行时权限的,而不是静态的xml权限。因此,如果你的targetSdkVersion还不想用23的话(毕竟弹框骚扰用户也不好;如果用户不给权限,也会影响你的部分功能正常工作),就换成低版本的友盟SDK吧,在build.gradle里改成如下即可:

compile 'com.umeng.analytics:analytics:5.6.1'

另外吐槽下友盟,官网的帮助文档也应该更新更新了。

你可能感兴趣的:(Android,友盟)