alwaystest / Blog

24 stars 2 forks source link

Android ShareSDK集成 #32

Open alwaystest opened 8 years ago

alwaystest commented 8 years ago

Android ShareSDK集成

标签(空格分隔): Android


为了方便,使用ShareSDK 2.7.6 来集成应用的分享功能。

先通读官方WIKI,有几点说明比较模糊,记录一下。

首先去官网下载最新版本的SDK,根据需求集成需要的平台,集成的越少,需要下载的SDK文件就越小。

运行QuickIntegrater.jar可以快速的生成一个“Android项目”,加引号的原因是相对以正常的Android项目,他缺少了AndroidManifest文件,因为是集成到一个已有的项目中去的,所以这里不需要这个文件。

使用QuickIntegrater.jar进行快速集成的时候,输入的项目名就是即将生成的Android项目的名字,包名是用来存放微信客户端回调Activity的java源文件的包名。输入的项目名其实无所谓啦,就是让你稍后能找到生成的项目在哪里。包名就比较重要了,因为Java源文件需要说明所在的package,就是这个啦,要是随便输的话,接下来要把这个文件放进项目中,还需要再根据情况更改Java源文件的package的。

生成快速集成的项目以后,除了这个项目以外的文件就没有用了,QuickIntegrater.jar就是根据项目名和包名自动整理了一下下载到的文件。

如果要直接集成到现有的项目中,按照官方说明做就好了。

但是如果不希望天天看到这么一堆将来不怎么可能更改的代码的话,我的选择是把ShareSDK作为Android Library Project 集成到项目中去。即Android Studio中的Module。

在Android中新建Module,注意选择为Library Project。这里要注意的是由于Gradle Plugin的Bug,Library Project会始终以release版本发布。

如果对Android Studio的Module (即Library Project)不了解的话,可以看看文章末尾我的一点看法,希望对理解这个概念有所帮助。

新建好Module以后,Android Studio会自动新建这个Module的Android Manifest文件。将上面生成的项目下面的文件放到他们应该在的位置上,这里就不用详细说了吧,Android项目的基本文件结构。src下面的文件需要放到Module下面的src/main/java下,保持包结构不变。

在Module的Manifest文件里声明Activity,这里如果你上面生成项目时候包名写好了,这里就可以直接使用.wxapi.WXEntryActivity来声明Activity的位置了。至于那个cn开头的包,貌似里面没有Activity,不需要在这里声明。要用的话直接new OnekeyShare()就可以了,具体可以查看官方文档,我没有用到他。

具体声明哪些Activity可以查看官方文档,这里没什么问题。

声明权限的地方,我没有直接把所有他要用的权限都粘过来,因为发现都粘过来以后应用多了一个访问联系人的危险权限,对于Android上乱申请权限的大环境,一看到一个应用申请用不到的敏感权限,心中对该应用的评价马上降低。所以我暂时先移除了以下两个权限。等将来出现问题再补回来。目前没有发现微信分享少了这个权限不能运行的情况。

 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
 <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

还有一个地方是<uses-permission android:name="android.permission.READ_PHONE_STATE"/>权限,申请之后会提示需要phone权限,个人觉得读取IMEI这种操作也会申请到这么大的权限,实在无法让用户放心啊。

分享到指定平台可以查看这里

对于微信分享,有两种方式,绕过审核分享和不绕过审核分享,说明见这里


Module项目可以理解为一个方便被集成到各个项目中的小模块,比如专门做Log的项目。

Module项目的Android Manifest文件会与主项目的Manifest项目merge。所以权限申请在两个文件中都是有效的。最好按模块分开,便于将来重用。

Module项目的depencency也可以被主项目使用。

对于使用APT生成代码的依赖库,要在用到的Module中都声明使用APT插件。比如在主项目和Module项目都用到了ButterKnife,那么需要在两个项目的build.gradle文件中都声明使用APT生成代码。

Module项目被主项目依赖,所以主项目可以调用Module项目的代码,Module项目之间没有声明项目依赖的话,应该是不可以互相调用的(猜想。。。)

Application文件只能有一个,不论在哪个Module里面,如果多个Module都指定了Application。编译时会报错。