前言:
在近期的项目当前,每次升级都需要改两个地方,一个是上传到服务器的json文件,一个是build.gradle汇总的versionCode和versionName,这样每次都很繁琐,较容易出现build.gradle中VersionCode未随升级版本改变而导致用户重复下载问题。
解决方法:
在build.gradle最外层添加如下方法:
String[] getVersionName(){
String jsonStr = ""
try {
File file = new File("${project.rootDir}/app/release/1.json")
Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8")
int ch = 0
StringBuilder sb = new StringBuilder()
while ((ch = reader.read()) != -1){
sb.append((char) ch);
}
reader.close()
jsonStr = sb.toString()
JSONObject jsonObject = new JSONObject(jsonStr)
println(jsonStr)
String[] strings = new String[2]
String versionName = jsonObject.get("versionName").toString()
String versionCode = jsonObject.get("versionCode").toString()
strings[0] = versionName
strings[1] = versionCode
println("版本名字:"+versionName)
println("版本号:"+versionCode)
return strings
} catch (IOException | JSONException e) {
e.printStackTrace()
println("读取错误:")
}
}
注意:
- 该方法与android同级
- ${project.rootDir}表示项目根目录
- 编译时即使代码发生错误也不会出现报错及奔溃
- 如果想要测试一下,可以使用task标签,只需要在方法前面加上task即可,但不能有返回值
1.json文件如下所示:
{
"apkUrl": "*****",
"description": "****",
"versionCode": 130,
"versionName": "1.132"
}
使用:
android {
...
String[] strings = getVersionName()
int myVersionCode = Integer.parseInt(strings[1])
String myVersionName = strings[0]
defaultConfig {
versionCode myVersionCode
versionName myVersionName
}
}
如果想通过代码查看当前的版本名跟版本号可以通过下面方式获取:
public static int getVersionCode(Context mContext){
int versionCode = 0;
try {
versionCode = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode;
}catch (PackageManager.NameNotFoundException e){
e.printStackTrace();
}
return versionCode;
}
public static String getVerName(Context mContext){
String verName = "";
try {
verName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;
}catch (PackageManager.NameNotFoundException e){
e.printStackTrace();
}
return verName;
}
|