更新SDK接入说明



1.接入说明


1.1 导入SDK

接入 aar 包


            dependencies {
              compile(name: 'dangbeiupdate-2.1.2-release', ext: 'aar')
            }
            

添加aar包支持


            android {
                repositories {
                    flatDir {
                        dirs 'libs'
                    }
                }
            }
            

或者接入 jar 包


            dependencies {
              compile files('libs/dangbeiupdate-2.1.2-release.jar')
            }
            

接入jar包时需要将res目录下的资源文件拷贝到本地工程对应目录下。



1.2 SDK所需权限


            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
            

其中 INTERNETACCESS_WIFI_STATE为必选权限 ;

WRITE_EXTERNAL_STORAGE 为可选权限,填写上后会将apk包下载到 SD卡上 ;

如果必选权限有缺失,会 toast 提示:Missing necessary permissions !



1.3 AndroidManifest配置


            <!-- dangbeiUpdate -->
            <activity
                 android:name="com.dangbei.update.view.UpdateDialog"
                 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
            
            <!-- dangbei download service -->
            <service android:name="com.dangbei.downloader.core.DownloadService"/>
            



1.4 调用更新


            // 后面的字符串为应用的appkey,由后台生成
            Update update  =  new Update(MainActivity.this, "a72b20061474961418");
            
            // 调用更新
            update.startUpdate(false);
            

调用更新时传入的布尔值,一般传入false;如果传入true,意思是无视跳过此版本,即用户点击了跳过此版本后下次调用依旧会提示更新。

我们会获取 manifest 中的 UMENG_CHANNEL,来区分渠道,如果您的应用没有接入友盟或者您的渠道是在java代码中动态设置的,请在调用更新之前使用


            update.setChannel("渠道");
            

来设置渠道号。



1.5 状态监听

如果您需要知道调用后是否会弹出更新,可以添加监听:


            update.setUpdateLisener(new Update.UpdateCallback() {
                @Override
                public void whetherUpdate(boolean udb) {
                    if (udb) {
                        // 提示更新
                    } else {
                        // 不提示更新(包括网络错误,后台设置不更新等情况)
                    }
                }
            });
            

安装调用的是系统安装,如果系统不存在自带的安装器,可以添加监听获知:


            update.setInstallLinsener(new Update.InstallCallback() {
                @Override
                public void installSucess() {
                     // 调起安装
                }
            
                @Override
                public void installFail() {
                     // 安装器不存在
                }
            });
            
            



1.6 版本兼容

如果您的targetSdkVersion 大于等于 24 ,在7.0以上的设备上,安装路径的获取会有所变化,需要在Manifest文件中额外添加:


            <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="com.dangbei.update.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/db_update_paths" />
            </provider>
            

另外要注意的是 android.permission.WRITE_EXTERNAL_STORAGE 这个权限在 6.0 以上是需要动态获取的。




2.混淆配置


            -dontwarn com.dangbei.downloader.**
            -keep class com.dangbei.downloader.** {*;}
            
            -dontwarn com.dangbei.update.**
            -keep class com.dangbei.update.** {*;}
            
            -keep public class **.R$*{
                public static final int *;
            }
            

3.注意

SDK中使用的反射来获取资源文件,所以打包时不要混淆R文件,要确保资源文件打入到apk中,不要被第三方工具删除。

另外要注意 版本兼容。