最近上架的一個(gè)項(xiàng)目相序的被百度平臺(tái)和360平臺(tái)下架栓始,郁悶的同時(shí)只能詢問客服妥凳,得到的回復(fù)都是‘**平臺(tái)的自動(dòng)更新SDK會(huì)在您系統(tǒng)自動(dòng)安裝有害系統(tǒng)的軟件贝攒,請(qǐng)使用本平臺(tái)提供的更新SDK’,強(qiáng)制使用它平臺(tái)的更新外還不可以兼容其他平臺(tái)圣猎,對(duì)于這種臭不要臉的行為士葫,作為開發(fā)者只能忌于百du 360的淫威尋找其他出路。
解決方案
- 創(chuàng)建兩個(gè)不同的Module送悔,分別存放360更新sdk和百度更新sdk
- 兩個(gè)Module中存放著相同的包名和方法名
- 分平臺(tái)創(chuàng)建不同的渠道包慢显,不同渠道引用不同的Module
- 上傳到Jcenter方便引用,發(fā)布開源項(xiàng)目到Jcenter/Bintray
1.360更新工具類
/**
* 360更新工具類
* Created by deng on 2016/11/11.
*/
public class UpdateUtils {
/* 手動(dòng)更新 欠啤, 自動(dòng)更新 荚藻, 強(qiáng)制更新*/
public static final int CHECK_MANUAL = 0, CHECK_AUTO = 1, CHECK_FORCE = 2;
private UpdateUtils() {}
private static UpdateUtils instance;
public static synchronized UpdateUtils getInit() {
if (instance == null)
instance = new UpdateUtils();
return instance;
}
/**
* 默認(rèn)版本更新方法
* @param mContext
* @param checkUpdateType
*/
public void update(Context mContext, int checkUpdateType) {
String packageName = getPackageInfo(mContext).packageName;
long intervalMillis = 10 * 1000L; //第一次調(diào)用startUpdateSilent出現(xiàn)彈窗后,如果10秒內(nèi)進(jìn)行第二次調(diào)用不會(huì)查詢更新
switch (checkUpdateType) {
case CHECK_MANUAL:
UpdateHelper.getInstance().init(mContext, Color.parseColor("#0A93DB"));
UpdateHelper.getInstance().setDebugMode(false);
UpdateHelper.getInstance().manualUpdate(packageName);
break;
case CHECK_AUTO:
UpdateHelper.getInstance().init(mContext, Color.parseColor("#0A93DB"));
UpdateHelper.getInstance().setDebugMode(false);
UpdateHelper.getInstance().autoUpdate(packageName, false, intervalMillis);
break;
case CHECK_FORCE:
UpdateHelper.getInstance().init(mContext, Color.parseColor("#0A93DB"));
UpdateHelper.getInstance().setDebugMode(false);
UpdateHelper.getInstance().autoUpdate(packageName, true, intervalMillis);
break;
default:
break;
}
}
/**
* 手動(dòng)配置參數(shù)
* @param mContext
* @param config
*/
public void update(Context mContext,UpdateConfig config){
String packageName = getPackageInfo(mContext).packageName;
long intervalMillis = 10 * 1000L; //第一次調(diào)用startUpdateSilent出現(xiàn)彈窗后洁段,如果10秒內(nèi)進(jìn)行第二次調(diào)用不會(huì)查詢更新
switch (config.getUpdateType()) {
case CHECK_MANUAL:
UpdateHelper.getInstance().init(mContext, config.getThemeColor_360());
UpdateHelper.getInstance().setDebugMode(config.isDebug());
UpdateHelper.getInstance().manualUpdate(packageName);
break;
case CHECK_AUTO:
UpdateHelper.getInstance().init(mContext, config.getThemeColor_360());
UpdateHelper.getInstance().setDebugMode(config.isDebug());
UpdateHelper.getInstance().autoUpdate(packageName, false, intervalMillis);
break;
case CHECK_FORCE:
UpdateHelper.getInstance().init(mContext, config.getThemeColor_360());
UpdateHelper.getInstance().setDebugMode(config.isDebug());
UpdateHelper.getInstance().autoUpdate(packageName, true, intervalMillis);
break;
default:
break;
}
}
/**
* 獲取App包 信息版本號(hào)
*
* @param context
* @return
*/
private PackageInfo getPackageInfo(Context context) {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return packageInfo;
}
}
2.百度更新工具類
//.....
/**
* 默認(rèn)版本更新方法
* @param mContext
* @param checkUpdateType
*/
public void update(Context mContext, int checkUpdateType) {
this.mContext = mContext;
this.checkUpdateType = checkUpdateType;
BDAutoUpdateSDK.cpUpdateCheck(mContext, this);
}
//.....
3.寫UpdateConfig是為了方便自定義傳遞參數(shù)的Builder应狱,例如360的字體顏色等,到最后發(fā)現(xiàn)作用并不大祠丝,這里就不貼出來了疾呻。
4.最后就是在App的build.gradle文件配置
android {
productFlavors {
_360 {}
baidu {}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
dependencies {
_360Compile project(':360updatelibrary')
baiduCompile project(':baiduupdatelibrary')
}
最后附上github地址
Usage
由于我上傳到Jcenter上方便調(diào)用
compile 'com.caption:360updatelibrary:0.0.2'
compile 'com.caption:baiduupdatelibrary:0.0.2'