diff --git a/app/build.gradle b/app/build.gradle index a2a71cb..da208b3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,10 +15,10 @@ android { minSdkVersion 20 targetSdkVersion 29 -// versionCode 104 -// versionName "3.0.9"//测试jiaoguanyi.cn - versionCode 1006 - versionName "2.0.1.6"// 正式jiaoguanyi.com 双数正式 单数测试 +// versionCode 105 +// versionName "3.1.0"//测试jiaoguanyi.cn +// versionCode 1008 +// versionName "2.0.1.8"// 正式jiaoguanyi.com 双数正式 单数测试 multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -26,14 +26,7 @@ android { exclude 'META-INF/rxjava.properties' } - /*********************************极光推送************************************/ - manifestPlaceholders = [ - JPUSH_PKGNAME: "com.jiaoguanyi.appstore", - JPUSH_APPKEY : "20f70bbeb78bad23eddd08d0", //JPush上注册的包名对应的appkey. - JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. - ] - /*********************************极光推送end************************************/ } lintOptions { checkReleaseBuilds false @@ -41,6 +34,46 @@ android { dexOptions { jumboMode true } + //多版本 + productFlavors { + official { + flavorDimensions "default" + versionCode 1009 + versionName "2.0.1.9"// 正式jiaoguanyi.com 双数正式 单数测试 + /*********************************极光推送************************************/ + manifestPlaceholders = [ + JPUSH_PKGNAME: "com.jiaoguanyi.appstore", + JPUSH_APPKEY : "20f70bbeb78bad23eddd08d0", //JPush上注册的包名对应的appkey. + JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. + ] + signingConfig signingConfigs.debug + /*********************************极光推送end************************************/ + buildConfigField "String", "ROOT_URL", '"https://partner.jiaoguanyi.com/api/"' + buildConfigField "String", "WebsocketURL", '"ws://47.107.133.19:1234"' + + } + + beta { + flavorDimensions "default" + versionCode 105 + versionName "3.1.0"//测试jiaoguanyi.cn + /*********************************极光推送************************************/ + manifestPlaceholders = [ + JPUSH_PKGNAME: "com.jiaoguanyi.appstore", + JPUSH_APPKEY : "52d81643665bb2cadacf0e9e", //JPush上注册的包名对应的appkey. + JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. + ] + signingConfig signingConfigs.debug + /*********************************极光推送end************************************/ + buildConfigField "String", "ROOT_URL", '"http://www.jiaoguanyi.cn/api/"' + buildConfigField "String", "WebsocketURL", '"ws://47.107.133.19:2345"' + + } + } + sourceSets { + beta.res.srcDirs = ['src/beta/res'] + } + //签名 signingConfigs { debug { @@ -72,7 +105,7 @@ android { variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null) { - def fileName = "${appName()}-V${defaultConfig.versionName}-${releaseTime()}.apk" + def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" output.outputFileName = new File(outputFile.parent, fileName) } } @@ -94,7 +127,7 @@ android { variant.outputs.each { output -> def outputFile = "" if (outputFile != null) { - def fileName = "${appName()}-${defaultConfig.versionCode}-V${defaultConfig.versionName}-${releaseTime()}.apk" + def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" output.outputFileName = new File(outputFile, fileName) } diff --git a/app/src/beta/res/mipmap-hdpi/ic_launcher.png b/app/src/beta/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..e2eb09e Binary files /dev/null and b/app/src/beta/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-mdpi/ic_launcher.png b/app/src/beta/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..e2eb09e Binary files /dev/null and b/app/src/beta/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-xhdpi/ic_launcher.png b/app/src/beta/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..e2eb09e Binary files /dev/null and b/app/src/beta/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png b/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..e2eb09e Binary files /dev/null and b/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..e2eb09e Binary files /dev/null and b/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/beta/res/values/strings.xml b/app/src/beta/res/values/strings.xml new file mode 100644 index 0000000..b3cd6ec --- /dev/null +++ b/app/src/beta/res/values/strings.xml @@ -0,0 +1,4 @@ + + + 设备信息测试 + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 25c3df0..e2f5877 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,7 +28,8 @@ + android:protectionLevel="signature" /> + @@ -109,7 +110,7 @@ - + @@ -291,7 +292,7 @@ android:value="developer-default" /> + android:value="${JPUSH_APPKEY}" /> \ No newline at end of file diff --git a/app/src/main/java/com/mjsheng/myappstore/MyApplication.java b/app/src/main/java/com/mjsheng/myappstore/MyApplication.java index a2cf1c8..0dce20e 100644 --- a/app/src/main/java/com/mjsheng/myappstore/MyApplication.java +++ b/app/src/main/java/com/mjsheng/myappstore/MyApplication.java @@ -171,7 +171,7 @@ public class MyApplication extends MultiDexApplication { startService(new Intent(this, MyDownloadService.class)); } registerTimeReceiver(); - ignoreBatteryOptimization(this); +// ignoreBatteryOptimization(this); } diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java index 40ceba2..298fa65 100644 --- a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java +++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java @@ -206,7 +206,7 @@ public class MainActivity extends AppCompatActivity { // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // } requestPermission(); - acquireWakeLock(); +// acquireWakeLock();//加入后锁屏解锁有延迟 registerMessageReceiver(); // used for receive msg // HTTPInterface.checkDevicesInfo(handler); startService(new Intent(MainActivity.this, MyDownloadService.class)); @@ -508,7 +508,7 @@ public class MainActivity extends AppCompatActivity { lazyLoading(); } } else if (code == -300) { - ApkUtils.uninstallAllApp(MainActivity.this); +// ApkUtils.uninstallAllApp(MainActivity.this); } } @@ -1049,6 +1049,7 @@ public class MainActivity extends AppCompatActivity { private void writeAppPackageList(String result) { String appstore = "com.jiaoguanyi.appstore"; String store = "com.jiaoguanyi.store"; + String iflytek = "iflytek.eface2sdk"; if (!TextUtils.isEmpty(result)) { LogUtils.e(result); if (!result.contains(appstore)) { @@ -1057,6 +1058,10 @@ public class MainActivity extends AppCompatActivity { if (!result.contains(store)) { result = result + "," + store; } + if (!result.contains(iflytek)) { + result = result + "," + iflytek; + } + //人脸识别 boolean b = Settings.System.putString(getContentResolver(), "qch_app_forbid", result); Log.e("mjsheng", "qch_app_forbid is :" + b + Settings.System.getString(getContentResolver(), "qch_app_forbid")); diff --git a/app/src/main/java/com/mjsheng/myappstore/network/Network.java b/app/src/main/java/com/mjsheng/myappstore/network/Network.java index 45315fe..953ccc1 100644 --- a/app/src/main/java/com/mjsheng/myappstore/network/Network.java +++ b/app/src/main/java/com/mjsheng/myappstore/network/Network.java @@ -1,9 +1,11 @@ package com.mjsheng.myappstore.network; +import android.os.Build; import android.os.Environment; import android.util.Log; +import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.network.api.AppLimitApi; import com.mjsheng.myappstore.network.api.BrankPicApi; import com.mjsheng.myappstore.network.api.CategoryPicApi; @@ -41,10 +43,12 @@ public class Network { // public static final String ROOT_URL = "http://www.as.xueshibao.com.cn/api/"; 弃用 // public static final String ROOT_URL = "https://www.jiaoguanyi.com/api/";//正式 弃用 - public static final String ROOT_URL = "https://partner.jiaoguanyi.com/api/";//正式 - public static final String WebsocketURL = "ws://47.107.133.19:1234"; + // public static final String ROOT_URL = "https://partner.jiaoguanyi.com/api/";//正式 +// public static final String WebsocketURL = "ws://47.107.133.19:1234"; // public static final String ROOT_URL = "http://www.jiaoguanyi.cn/api/";//测试 // public static final String WebsocketURL = "ws://47.107.133.19:2345"; + public static final String ROOT_URL = BuildConfig.ROOT_URL; + public static final String WebsocketURL = BuildConfig.WebsocketURL; private static UploadAppInfoApi uploadAppInfoApi; private static DeselectIDApi deselectIDApi; @@ -250,6 +254,7 @@ public class Network { Log.e("mjsheng", "forceDownloadApi"); return forceDownloadApi; } + public static GetLockState getLockState() { if (getLockState == null) { Retrofit retrofit = new Retrofit.Builder() diff --git a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java index 8b59bfc..90ccefa 100644 --- a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java +++ b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java @@ -2,9 +2,12 @@ package com.mjsheng.myappstore.server; import android.app.Service; import android.content.Context; +import android.content.ContextWrapper; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.os.BatteryManager; import android.os.Build; import android.os.Handler; import android.os.IBinder; @@ -23,6 +26,7 @@ import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.MyApplication; +import com.mjsheng.myappstore.activity.MainActivity; import com.mjsheng.myappstore.bean.ForceDownloadBean; import com.mjsheng.myappstore.bean.ForceDownloadData; import com.mjsheng.myappstore.bean.NetAndLaunchBean; @@ -299,7 +303,7 @@ public class InitJpushServer extends Service { } private void writeAppPackageList(String result) { - ApkUtils. addShortcut(this, result);//开机之后添加图标到桌面 + ApkUtils.addShortcut(this, result);//开机之后添加图标到桌面 String appstore = "com.jiaoguanyi.appstore"; String store = "com.jiaoguanyi.store"; if (!TextUtils.isEmpty(result)) { @@ -315,12 +319,13 @@ public class InitJpushServer extends Service { } else { Log.e("mjsheng", "writeAppPackageList is null:"); } - deleteOtherApp(result); + int locked = Settings.System.getInt(InitJpushServer.this.getContentResolver(), "qch_unlock_ipad", 1); + if (locked == 0) { + deleteOtherApp(result); + } } - - private void deleteOtherApp(String packageList) { Log.e("deleteOtherApp", "packageList:" + packageList); String[] result = packageList.split(","); @@ -812,7 +817,7 @@ public class InitJpushServer extends Service { } } else if (code == -300) { - ApkUtils.uninstallAllApp(InitJpushServer.this); +// ApkUtils.uninstallAllApp(InitJpushServer.this); } } @@ -826,13 +831,27 @@ public class InitJpushServer extends Service { } - synchronized private void resetDevice() { + private void resetDevice() { boolean isReset = MySQLData.GetBooleanData(this, CommonDatas.IS_RESET); - if (isReset) { + int batteryLevel = getBatteryLevel(); + LogUtils.e(batteryLevel + "------------------" + isReset); + if (isReset && batteryLevel >= CommonDatas.MIN_POWER) { Utils.doMasterClear(this); } } + private int getBatteryLevel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + BatteryManager batteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE); + return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); + } else { + Intent intent = new ContextWrapper(InitJpushServer.this). + registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + return (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) / + intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); + } + } + private void checkUpdate() { HTTPInterface.checkUpdate(mHandler, "com.jiaoguanyi.store"); } diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java b/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java index a2b4d1a..77e8209 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java @@ -42,6 +42,7 @@ import android.widget.Toast; import com.alibaba.fastjson.JSONObject; import com.arialyy.aria.core.Aria; import com.blankj.utilcode.util.EncryptUtils; +import com.blankj.utilcode.util.FileUtils; import com.blankj.utilcode.util.PathUtils; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; @@ -53,6 +54,7 @@ import com.mjsheng.myappstore.R; import com.mjsheng.myappstore.MyApplication; import com.mjsheng.myappstore.comm.CommonDatas; +import java.io.File; import java.io.FileReader; import java.io.InputStreamReader; import java.io.LineNumberReader; @@ -937,6 +939,12 @@ public class Utils { if (ApkUtils.isAvailable(context, s)) { allList.remove(s); //去掉已经安装的 + } else { + if (allList.indexOf(s) == -1) { + allList.add(s); + } + //没有安装就加入进去 + //没有加入会导致安装后卸载不能再安装的情况 } } } @@ -978,21 +986,44 @@ public class Utils { return url.substring(position + 1); } - private String getMD5fromFileName(String fileName) { + private static String getMD5fromFileName(String fileName) { int position = fileName.lastIndexOf("/"); - return fileName.substring(position + 9); + + return fileName.substring(position + 9, fileName.length() - 4); } public static void ariaDownload(Context context, String url, JSONObject jsonObject) { String fileName = getFileNamefromURL(url); - Aria.download(context) - .load(url) //读取下载地址 - .setFilePath(PathUtils.getExternalDownloadsPath() + "/jgy/" + fileName, true) - .setExtendField(jsonObject.toJSONString()) - .create(); //启动下载} + String urlMD5 = jsonObject.getString("MD5"); + Log.e("ariaDownload", "urlMD5=" + urlMD5); + File file = new File(PathUtils.getExternalDownloadsPath() + "/jgy/" + fileName); + if (file.exists() && !file.isDirectory()) { + String filenameMD5 = getMD5fromFileName(url); + + String fileMD5 = FileUtils.getFileMD5ToString(file); + Log.e("ariaDownload", "filenameMD5=" + filenameMD5); + Log.e("ariaDownload", "fileMD5=" + fileMD5); + //后端还没有完成json字段的MD5,暂时用文件名获取 + if (fileMD5.equalsIgnoreCase(filenameMD5)) { + ApkUtils.installApp(context, file.getAbsolutePath()); + } else { + Aria.download(context) + .load(url) //读取下载地址 + .setFilePath(PathUtils.getExternalDownloadsPath() + "/jgy/" + fileName, true) + .setExtendField(jsonObject.toJSONString()) + .create(); //启动下载} // SaveListUtils.addDownLoadList(app_package); // } + } + } else { + Aria.download(context) + .load(url) //读取下载地址 + .setFilePath(PathUtils.getExternalDownloadsPath() + "/jgy/" + fileName, true) + .setExtendField(jsonObject.toJSONString()) + .create(); //启动下载} + } + } } diff --git a/jiaoguanyiInfo.iml b/jiaoguanyiInfo.iml index b89c795..0c823ed 100644 --- a/jiaoguanyiInfo.iml +++ b/jiaoguanyiInfo.iml @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/local.properties b/local.properties index 529dff7..3e5f772 100644 --- a/local.properties +++ b/local.properties @@ -4,5 +4,5 @@ # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. -#Mon Feb 24 11:04:00 CST 2020 -sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk +#Mon Jul 20 16:54:17 CST 2020 +sdk.dir=G\:\\Sdk