一,项目目的
利用 ApkPlug 插件化框架将 ShareSDK 组件化,以实现按需动态加载和减小应用体积的目的。
ShareSDK 是非常棒的移动社会化分享和评论工具,相信我们在开发应用过程中都离不开它。但是当我们集成 ShareSDK 时候同样会遇到一些问题。
1. ShareSDK 包比较大,组合国内多家分享平台以后其 SDK 包的大小应该在 1M 以上, 这对应用来说还是不小的负荷。
2. 集成 ShareSDK 过程中我们不可避免的需要将它的资源文件复制到应用的 res 资源 目录下,这对我们应用后期维护造成不小的干扰。
基于以上的两大情况,我想通过 ApkPlug 框架将 ShareSDK 整体做成组件,在用户需要的时候 才动态的从服务端加载到本地,这样做很方便的就解决了以上两个问题。
二,项目所使用到的开发库Apkplug v2.7.5 版本 (必须是 v2.7.5 以上版本,否则无法运行)
Apkplug 插件托管服务 v1.8.0 版本以上
ShareSDK v2.10.7 (使用的最新版本 DEMO)
三,项目目录结构
ShareSDKMain ---主应用演示 DEMO
ShareSDKPlug ---ShareSDK 组件的具体实现
PlugShareSDK1.0.0.jar --组件调用库
四,使用步骤
(1)导入ApkPlug 框架
将 Bundle2.7.5-Dev.jar 和 ApkplugCloudService1.8.0-Release.jar 拷贝到主应用 libs 目录下
Bundle2.7.5-Dev.jar 是 apkplug核心库 (v2.7.5 版本以后只需要该文件即可不在需 要 libndkfoo.so)
ApkplugCloudService1.8.0-Release.jar 是 apkplug 插件托管服务SDK,我们用它下载 服务端的 ShareSDK 组件
(2)导入ShareSDK 调用库
将 PlugShareSDK1.0.0.jar 拷贝到主应用的libs 目录下,它是 ShareSDK 组件的调用库,它封装了 ShareSDK 组件的调用接口,以及如果从 apkplug 插件托管服务下载组件的业务 逻辑。(3)配置相关权限
<!-- APKPLUG框架须要的权限 -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- ShareSDK须要的权限 -->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
(4)配置相关 activity
<pre name="code" class="html"><!-- APKPLUG框架须要的Activity配置 -->
<activity
android:name="org.apkplug.app.apkplugActivity"
android:theme="@android:style/Theme.Translucent"
android:configChanges="orientation|keyboardHidden"
/>
<!-- ShareSDK须要的Activity配置 -->
<!-- 微信分享回调 -->
<activity
android:name="cn.sharesdk.socialization.sample.wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
<!-- 易信分享回调 -->
<activity
android:name="cn.sharesdk.socialization.sample.yxapi.YXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleTop" />
<activity
android:name="cn.sharesdk.framework.ShareSDKUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize" >
<!--
<span style="white-space:pre"> </span>Adapter表示一个继承自cn.sharesdk.framework.authorize.AuthorizeAdapter的类,这个类可以监听到页面的生命周期,<span style="letter-spacing: 0.5pt; font-family: Arial, Helvetica, sans-serif;">也可以获取授权页面的各种UI<span style="white-space:pre"> </span>控件。</span>
<span style="white-space:pre"> </span>开发者可以通过继承AuthorizeAdapter,重写其方法,并获取各种UI来自定义这个页面的行为。
<span style="white-space:pre"> </span><meta-data android:name="Adapter" android:value="cn.sharesdk.demo.MyAdapter" />
-->
<!--Dropbox的SSO功能需要在此处添加一个对ACTION_VIEW事件的过滤器,其中的scheme是“db-”前缀再开发者应用的加上appKey。如果此过滤器不设置,则不能完成SSO功能授权
-->
<intent-filter>
<data android:scheme="db-7janx53ilz11gbs" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!--如果集成QQ分享,或者使用QQ客户端来进行QQ空间的分享,须要在此处添加一个对ACTION_VIEW事件的过滤器,其中的scheme是“tenc ent”前缀再开发者应用的加上appId。如 果此过滤器不设置,则分享结束以后不能得到正确的回调
-->
<intent-filter>
<data android:scheme="tencent100371282" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
注释说明:
ApkPlug框架的插件activity是不需要在宿主配置的,但ShareSDK的这几个 Activity
是负责与外部应用通信回调的,因此需要在宿主配置5,调用ShareSDK 组件
以上步骤配置完成以后即可使用 ShareSDK 组件了,使用方式非常简单,以分享功能为例
1.首先初始化 ShareSdkAgent (在 PlugShareSDK1.0.0.jar 包中定义)
ShareSdkAgentagent=new ShareSdkAgent(this,frame.getSystemBundleContext());2.创建分享数据 Bean PlugShareInfo (在 PlugShareSDK1.0.0.jar 包中定义)
<pre name="code" class="html"><span style="font-size:12px;">final PlugShareInfo oks=new PlugShareInfo();
oks.setAddress("北京市");
oks.setTitle("apkplug下sharesdk分享组件功能");
oks.setTitleUrl("http://www.apkplug.com");
oks.setText("apkplug是android下的模块化框架,ShareSDK是一个非常棒的社会化分享组件, 本着不重复造轮子的思想,我们将ShareSDK做成插件。详情见官网http://www.apkplug.com");
//oks.setImagePath(testImage);
oks.setImageUrl("http://img.appgo.cn/imgs/sharesdk/content/2013/07/25/1374723172663.jpg");
oks.setUrl("http://www.apkplug.com");
//oks.setFilePath(testImage);
oks.setComment("推荐使用apkplug框架减小应用体积,提供开发效率。");
oks.setSite(getString(R.string.app_name));
oks.setSiteUrl("http://mob.com");
oks.setVenueName("apkplug");
oks.setVenueDescription("apkplug是android下的模块化框架!");
oks.setLatitude(23.056081f);
oks.setLongitude(113.385708f);
oks.setDisableSSOWhenAuthorize(false);</span>
3.调用 ShareSDK 组件进行分享
<span style="font-size:12px;">agent.StatShareSDK(
new CheckInitCallBack(){
@Override
public void onSuccess(PlugShareSDK sharesdk) {
//ShareSDK组件已安装并启动完成
//执行分享功能 sharesdk.showShare(oks);
}
@Override
public void onFailure(int errorNo, String strMsg) {
}
});
</span>
6,操作演示
源码及 Demo 地址:http://store.apkplug.com/pluginfo?plugid=201503301441241
详情地址:http://store.apkplug.com/pluginfo?plugid=201503301441241
QQ交流群:132433459