diff --git a/app/build.gradle b/app/build.gradle index 1eb79e7..6f011e4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,8 +50,8 @@ android { productFlavors { official { flavorDimensions "default" - versionCode 1036 - versionName "2.0.3.6" + versionCode 1037 + versionName "2.0.3.7" /*********************************极光推送************************************/ manifestPlaceholders = [ JPUSH_PKGNAME: "com.jiaoguanyi.appstore", @@ -182,7 +182,6 @@ android { if (outputFile != null) { def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${productFlavors[0].name}-${buildType.name}.apk" output.outputFileName = fileName - } } } @@ -234,7 +233,7 @@ dependencies { preBuild { doLast { - def imlFile = file( project.name + ".iml") + def imlFile = file(project.name + ".iml") println 'Change ' + project.name + '.iml order' try { def parsedXml = (new XmlParser()).parse(imlFile) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ceadb6f..d8fc1ad 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,6 +25,8 @@ + + MAX_WAIT_TIME)) { + observer.wait(WAIT_TIME_INCR); + waitTime += WAIT_TIME_INCR; + } + if (!observer.isDone()) { + throw new Exception("Timed out waiting for PackageStatsObserver.onGetStatsCompleted"); + } + } + Log.d(TAG, "toString " + observer.stats.toString()); + return observer.stats.dataSize + observer.stats.cacheSize; + } catch (RemoteException e) { + Log.w(TAG, "Failed to get handle for PackageManger Exception: " + e); + return -1; + } catch (InterruptedException e) { + Log.w(TAG, "InterruptedException :" + e); + return -1; + } + } + + /** + * 清除应用数据 + * + * @param context + * @param packageName + * @return + * @throws Exception + */ + public boolean cleanApplicationUserData(Context context, String packageName) throws Exception { + try { + PackageDataObserver observer = new PackageDataObserver(); + // wait on observer + synchronized (observer) { + Method method = PackageManager.class.getMethod("clearApplicationUserData", new Class[] { String.class, IPackageDataObserver.class }); + method.invoke(context.getPackageManager(), packageName, observer); +// getPm().deleteApplicationCacheFiles(appid, observer); + long waitTime = 0; + while (!observer.isDone() || (waitTime > MAX_WAIT_TIME)) { + observer.wait(WAIT_TIME_INCR); + waitTime += WAIT_TIME_INCR; + } + if (!observer.isDone()) { + throw new Exception("timed out waiting for PackageDataObserver.onRemoveCompleted"); + } + } + Log.d(TAG, "cleanApplicationCache " + observer.retValue); + return observer.retValue; + } catch (RemoteException e) { + Log.w(TAG, "Failed to get handle for PackageManger Exception: " + e); + return false; + } catch (InterruptedException e) { + Log.w(TAG, "InterruptedException :" + e); + return false; + } + } + + private IPackageManager getPm() { + return IPackageManager.Stub.asInterface(ServiceManager.getService("package")); + } + + class PackageDataObserver extends IPackageDataObserver.Stub { + public boolean retValue = false; + private boolean doneFlag = false; + + public void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException { + synchronized (this) { + retValue = succeeded; + doneFlag = true; + notifyAll(); + } + } + + public boolean isDone() { + return doneFlag; + } + } + + class PackageStatsObserver extends IPackageStatsObserver.Stub { + public boolean retValue = false; + public PackageStats stats; + private boolean doneFlag = false; + + public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { + synchronized (this) { + retValue = succeeded; + stats = pStats; + doneFlag = true; + notifyAll(); + } + } + + public boolean isDone() { + return doneFlag; + } + } + +} + diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/JGYUtils.java b/app/src/main/java/com/mjsheng/myappstore/utils/JGYUtils.java index a9cd620..d34a62b 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/JGYUtils.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/JGYUtils.java @@ -63,6 +63,11 @@ public class JGYUtils { return sInstance; } + public static boolean isOfficialVersion() { + String channelValue = JGYUtils.getInstance().getStringMetaData(); + return "official".equals(channelValue); + } + public void resetDevice() { boolean isReset = MySQLData.GetBooleanData(mContext, CommonDatas.IS_RESET); diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 69d9aa9..7d2f612 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -78,9 +78,8 @@ android:fadingEdge="none" android:overScrollMode="never" android:scrollbars="none" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/tv_customversion" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imageView"> @@ -91,6 +90,7 @@ android:layout_marginLeft="@dimen/dp_150" android:layout_marginTop="12dp" android:layout_marginRight="@dimen/dp_150" + android:layout_marginBottom="16dp" android:orientation="vertical" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -309,8 +309,8 @@ android:layout_width="@dimen/dp_240" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:layout_marginTop="8dp" - android:layout_marginBottom="8dp" + android:layout_marginTop="16dp" + android:layout_marginBottom="24dp" android:background="@drawable/bt_checkupdate_selector" android:stateListAnimator="@null" android:text="检查更新" @@ -325,5 +325,14 @@ + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml index c2fdeba..1b1430c 100644 --- a/app/src/main/res/layout-port/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -325,4 +325,14 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/linearLayout" /> + + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 9e6fce1..47e6c74 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,19 +1,16 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit +## For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html - +# # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -android.enableJetifier=true -android.useAndroidX=true -org.gradle.jvmargs=-Xmx1536m - +# Default value: -Xmx1024m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true +#Thu Apr 15 10:50:40 CST 2021 +android.enableJetifier=true +org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M" +android.useAndroidX=true