mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
This commit is contained in:
@@ -1154,7 +1154,11 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F
|
||||
getBuildService().setListener(null);
|
||||
getBuildService().exit();
|
||||
}
|
||||
|
||||
|
||||
// Make sure we close files
|
||||
// This fill further make sure that file contents are not erased.
|
||||
closeAll();
|
||||
|
||||
getApp().getPrefManager().setOpenedProject(PreferenceManager.NO_OPENED_PROJECT);
|
||||
|
||||
LSP.shutdownAll();
|
||||
|
||||
@@ -8,12 +8,16 @@ import com.itsaky.androidide.models.project.IDEModule;
|
||||
import com.itsaky.androidide.models.project.IDEProject;
|
||||
import com.itsaky.androidide.services.IDEService;
|
||||
import com.itsaky.androidide.tasks.GradleTask;
|
||||
import com.itsaky.androidide.tasks.gradle.build.ApkGeneratingTask;
|
||||
import com.itsaky.androidide.utils.Environment;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import java.util.Collection;
|
||||
|
||||
public class BuildServiceHandler extends IDEHandler implements IDEService.BuildListener {
|
||||
|
||||
@@ -92,14 +96,19 @@ public class BuildServiceHandler extends IDEHandler implements IDEService.BuildL
|
||||
|
||||
@Override
|
||||
public void onBuildSuccessful(GradleTask task, String msg) {
|
||||
if(task == null) return;
|
||||
if(task == null || activity() == null) return;
|
||||
if(task.canOutput())
|
||||
activity().setStatus(msg);
|
||||
|
||||
if(task.getType() == GradleTask.Type.BUILD) {
|
||||
if(task.getTaskID() == IDEService.TASK_ASSEMBLE_DEBUG) {
|
||||
if(task.buildsApk()) {
|
||||
activity().install(task.getApk(new File(provider.provideAndroidProject().getMainModulePath(), "build").getAbsolutePath(), provider.provideAndroidProject().getMainModule()));
|
||||
|
||||
// If this task generates APK, ask user if he/she wants to install them
|
||||
if (task instanceof ApkGeneratingTask) {
|
||||
final IDEProject project = activity().provideIDEProject();
|
||||
final Optional<IDEModule> app = project.getModuleByPath(":app"); // TODO Handle multiple application modules
|
||||
if(app.isPresent()) {
|
||||
final String path = app.get().projectDir;
|
||||
if(path != null) {
|
||||
final File buildDir = new File (path, "build");
|
||||
installApks (((ApkGeneratingTask) task).getApks(buildDir));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -115,7 +124,7 @@ public class BuildServiceHandler extends IDEHandler implements IDEService.BuildL
|
||||
if(task.canOutput()) {
|
||||
activity().setStatus(msg);
|
||||
}
|
||||
|
||||
|
||||
activity().getApp().getPrefManager().putBoolean(PreferenceManager.KEY_IS_FIRST_PROJECT_BUILD, false);
|
||||
activity().invalidateOptionsMenu();
|
||||
activity().getBinding().buildProgressIndicator.setVisibility(View.GONE);
|
||||
@@ -157,4 +166,35 @@ public class BuildServiceHandler extends IDEHandler implements IDEService.BuildL
|
||||
*/
|
||||
&& !file.getAbsolutePath().endsWith("/release/R.jar");
|
||||
}
|
||||
|
||||
private void installApks (final Set<File> apks) {
|
||||
if (activity () == null || apks == null || apks.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(apks.size() == 1) {
|
||||
activity().install(apks.iterator().next());
|
||||
} else {
|
||||
final List<File> files = new ArrayList<File> (apks);
|
||||
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity(), R.style.AppTheme_MaterialAlertDialog);
|
||||
builder.setTitle(activity().getString(R.string.title_install_apks));
|
||||
builder.setItems(getNames(files), (d, w) -> {
|
||||
d.dismiss();
|
||||
activity().install(files.get(w));
|
||||
});
|
||||
builder.show();
|
||||
}
|
||||
}
|
||||
|
||||
private CharSequence[] getNames (final Collection<File> apks) {
|
||||
final String[] names = new String[apks.size()];
|
||||
|
||||
int i = 0;
|
||||
for (File apk : apks) {
|
||||
names[i] = apk.getName();
|
||||
++i;
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,6 +73,8 @@ public class ApkMetadata {
|
||||
|
||||
public static class ArtifactType {
|
||||
|
||||
public static String TYPE_APK = "APK";
|
||||
|
||||
@SerializedName("type")
|
||||
private String type;
|
||||
|
||||
|
||||
@@ -12,8 +12,6 @@ public interface GradleTask {
|
||||
public boolean affectsGeneratedSources();
|
||||
public boolean shouldSaveFiles();
|
||||
public boolean canOutput();
|
||||
public boolean buildsApk();
|
||||
public File getApk(String buildFolder, String moduleName);
|
||||
public Type getType();
|
||||
|
||||
public static enum Type {
|
||||
|
||||
@@ -7,8 +7,11 @@ import com.itsaky.androidide.tasks.BaseGradleTask;
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class AssembleDebug extends BaseGradleTask {
|
||||
public class AssembleDebug extends ApkGeneratingTask {
|
||||
|
||||
private boolean installApk = true;
|
||||
|
||||
@@ -22,15 +25,12 @@ public class AssembleDebug extends BaseGradleTask {
|
||||
return StudioApp.getInstance().getString(R.string.build_debug);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return installApk;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return new File(buildFolder, "outputs/apk/debug/" + moduleName + "-debug.apk");
|
||||
}
|
||||
@Override
|
||||
protected Set<File> provideApkDirectories(File buildDir) {
|
||||
final Set<File> dirs = new HashSet<>();
|
||||
dirs.add(new File(buildDir, "outputs/apk/debug"));
|
||||
return dirs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommands() {
|
||||
|
||||
@@ -3,13 +3,14 @@ package com.itsaky.androidide.tasks.gradle.build;
|
||||
import com.itsaky.androidide.R;
|
||||
import com.itsaky.androidide.app.StudioApp;
|
||||
import com.itsaky.androidide.services.IDEService;
|
||||
import com.itsaky.androidide.tasks.BaseGradleTask;
|
||||
import com.itsaky.androidide.tasks.GradleTask;
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class AssembleRelease extends BaseGradleTask {
|
||||
public class AssembleRelease extends ApkGeneratingTask {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
@@ -17,14 +18,11 @@ public class AssembleRelease extends BaseGradleTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return new File(buildFolder, "outputs/apk/release/" + moduleName + "-release.apk");
|
||||
}
|
||||
protected Set<File> provideApkDirectories(File buildDir) {
|
||||
final Set<File> dirs = new HashSet<>();
|
||||
dirs.add(new File(buildDir, "outputs/apk/release"));
|
||||
return dirs;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,13 +3,14 @@ package com.itsaky.androidide.tasks.gradle.build;
|
||||
import com.itsaky.androidide.R;
|
||||
import com.itsaky.androidide.app.StudioApp;
|
||||
import com.itsaky.androidide.services.IDEService;
|
||||
import com.itsaky.androidide.tasks.BaseGradleTask;
|
||||
import com.itsaky.androidide.tasks.GradleTask;
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class Build extends BaseGradleTask {
|
||||
public class Build extends ApkGeneratingTask {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
@@ -17,16 +18,13 @@ public class Build extends BaseGradleTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return new File(buildFolder, "outputs/apk/debug/" + moduleName + "-debug.apk");
|
||||
}
|
||||
protected Set<File> provideApkDirectories(File buildDir) {
|
||||
final Set<File> dirs = new HashSet<>();
|
||||
dirs.add(new File(buildDir, "outputs/apk/debug"));
|
||||
dirs.add(new File(buildDir, "outputs/apk/release"));
|
||||
return dirs;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getCommands() {
|
||||
return "build";
|
||||
|
||||
@@ -15,18 +15,7 @@ public class Bundle extends BaseGradleTask {
|
||||
public String getName() {
|
||||
return StudioApp.getInstance().getString(R.string.create_aab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String getCommands() {
|
||||
return "bundle";
|
||||
|
||||
@@ -15,17 +15,7 @@ public class Clean extends BaseGradleTask {
|
||||
public String getName() {
|
||||
return StudioApp.getInstance().getString(R.string.clean_project);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getCommands() {
|
||||
return "clean";
|
||||
|
||||
@@ -15,18 +15,7 @@ public class CleanBuild extends BaseGradleTask {
|
||||
public String getName() {
|
||||
return StudioApp.getInstance().getString(R.string.clean_amp_build);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String getCommands() {
|
||||
return "clean build";
|
||||
|
||||
@@ -35,16 +35,6 @@ public class Lint extends BaseGradleTask {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return Type.LINT;
|
||||
|
||||
@@ -35,16 +35,6 @@ public class LintDebug extends BaseGradleTask {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return Type.LINT;
|
||||
|
||||
@@ -34,17 +34,7 @@ public class LintRelease extends BaseGradleTask {
|
||||
public boolean canOutput() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return Type.LINT;
|
||||
|
||||
@@ -33,16 +33,6 @@ public class InitializeIDEProject extends BaseGradleTask {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GradleTask.Type getType() {
|
||||
return Type.ANDROIDIDE_PLUGIN;
|
||||
|
||||
+1
-11
@@ -36,17 +36,7 @@ public class DatabindingGenBaseClassesDebug extends BaseGradleTask {
|
||||
public boolean canOutput() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return Type.BUILD;
|
||||
|
||||
+1
-11
@@ -37,17 +37,7 @@ public class ProcessDebugResources extends BaseGradleTask {
|
||||
public boolean canOutput() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public GradleTask.Type getType() {
|
||||
return Type.BUILD;
|
||||
|
||||
+1
-11
@@ -54,17 +54,7 @@ public class UpdateResourceClassesTask extends BaseGradleTask {
|
||||
public boolean canOutput() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean buildsApk() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getApk(String buildFolder, String moduleName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public GradleTask.Type getType() {
|
||||
return Type.BUILD;
|
||||
|
||||
@@ -15,169 +15,158 @@ import androidx.core.content.ContextCompat;
|
||||
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
|
||||
import com.itsaky.androidide.R;
|
||||
import com.itsaky.androidide.databinding.LayoutToastBinding;
|
||||
import android.os.Looper;
|
||||
import com.blankj.utilcode.util.ThreadUtils;
|
||||
|
||||
public class Toaster
|
||||
{
|
||||
public class Toaster {
|
||||
|
||||
private LayoutToastBinding binding;
|
||||
|
||||
|
||||
private Toast mToast;
|
||||
private Context mContext;
|
||||
private Gravity mGravity;
|
||||
private Type mType;
|
||||
private Drawable mDrawable;
|
||||
private AnimatedVectorDrawableCompat mIcon;
|
||||
|
||||
|
||||
private int mIconColor = Color.DKGRAY;
|
||||
private int mDuration = 0;
|
||||
|
||||
|
||||
public static final int COLOR_SUCCESS = Color.parseColor("#4CAF50");
|
||||
public static final int COLOR_ERROR = Color.parseColor("#F44336");
|
||||
public static final int REVEAL_ANIM_DURATION = 500;
|
||||
public static final int SHORT = 2000;
|
||||
public static final int LONG = 3500;
|
||||
|
||||
public Toaster(Context context)
|
||||
{
|
||||
public Toaster(Context context) {
|
||||
this.mContext = context;
|
||||
this.mType = Type.INFO;
|
||||
|
||||
|
||||
this.mDrawable = createBackgroundDrawable();
|
||||
|
||||
|
||||
createView();
|
||||
}
|
||||
|
||||
protected View createView()
|
||||
{
|
||||
|
||||
protected View createView() {
|
||||
binding = LayoutToastBinding.inflate(LayoutInflater.from(mContext));
|
||||
binding.toastToastWrapper.setToasterInstance(this);
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
protected Drawable createBackgroundDrawable()
|
||||
{
|
||||
|
||||
protected Drawable createBackgroundDrawable() {
|
||||
GradientDrawable drawable = new GradientDrawable();
|
||||
drawable.setShape(GradientDrawable.RECTANGLE);
|
||||
drawable.setColor(ContextCompat.getColor(mContext, R.color.color_toast_background));
|
||||
drawable.setCornerRadius(25);
|
||||
return drawable;
|
||||
}
|
||||
|
||||
protected AnimatedVectorDrawableCompat createToastIconAnimation(int tintColor)
|
||||
{
|
||||
|
||||
protected AnimatedVectorDrawableCompat createToastIconAnimation(int tintColor) {
|
||||
AnimatedVectorDrawableCompat imageDrawable = AnimatedVectorDrawableCompat.create(mContext, mType == Type.SUCCESS ? R.drawable.ic_ok : R.drawable.ic_error);
|
||||
imageDrawable.setTint(tintColor);
|
||||
imageDrawable.setTintMode(PorterDuff.Mode.SRC_ATOP);
|
||||
binding.toastImage.setImageDrawable(imageDrawable);
|
||||
return imageDrawable;
|
||||
}
|
||||
|
||||
public void show()
|
||||
{
|
||||
|
||||
public void show() {
|
||||
ThreadUtils.runOnUiThread(() -> {
|
||||
showInternal();
|
||||
});
|
||||
}
|
||||
|
||||
protected void showInternal() {
|
||||
int dp16 = toPx(16);
|
||||
mIconColor = mType == Type.SUCCESS ? COLOR_SUCCESS :
|
||||
mType == Type.ERROR ? COLOR_ERROR :
|
||||
Color.DKGRAY;
|
||||
int gravity = mGravity == Gravity.TOP_LEFT ? (android.view.Gravity.TOP|android.view.Gravity.START) :
|
||||
mGravity == Gravity.TOP_RIGHT ? (android.view.Gravity.TOP|android.view.Gravity.END) :
|
||||
mGravity == Gravity.BOTTOM_RIGHT ? (android.view.Gravity.BOTTOM|android.view.Gravity.END) :
|
||||
mGravity == Gravity.BOTTOM_LEFT ? (android.view.Gravity.BOTTOM|android.view.Gravity.START) :
|
||||
android.view.Gravity.TOP|android.view.Gravity.END;
|
||||
|
||||
mType == Type.ERROR ? COLOR_ERROR :
|
||||
Color.DKGRAY;
|
||||
int gravity = mGravity == Gravity.TOP_LEFT ? (android.view.Gravity.TOP | android.view.Gravity.START) :
|
||||
mGravity == Gravity.TOP_RIGHT ? (android.view.Gravity.TOP | android.view.Gravity.END) :
|
||||
mGravity == Gravity.BOTTOM_RIGHT ? (android.view.Gravity.BOTTOM | android.view.Gravity.END) :
|
||||
mGravity == Gravity.BOTTOM_LEFT ? (android.view.Gravity.BOTTOM | android.view.Gravity.START) :
|
||||
android.view.Gravity.TOP | android.view.Gravity.END;
|
||||
|
||||
mIcon = createToastIconAnimation(mIconColor);
|
||||
|
||||
|
||||
mToast = Toast.makeText(mContext, binding.toastText.getText(), mDuration);
|
||||
mToast.setGravity(gravity, dp16, dp16);
|
||||
mToast.setDuration(mDuration);
|
||||
mToast.setView(binding.getRoot());
|
||||
mToast.show();
|
||||
|
||||
|
||||
binding.toastImage.setImageDrawable(mIcon);
|
||||
mIcon.start();
|
||||
}
|
||||
|
||||
public Toaster setText(String text)
|
||||
{
|
||||
if(binding.toastText == null)
|
||||
|
||||
public Toaster setText(String text) {
|
||||
if (binding.toastText == null)
|
||||
createView();
|
||||
|
||||
|
||||
binding.toastText.setText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Toaster setText(int textResId)
|
||||
{
|
||||
if(binding.toastText == null)
|
||||
|
||||
public Toaster setText(int textResId) {
|
||||
if (binding.toastText == null)
|
||||
createView();
|
||||
|
||||
binding.toastText.setText(textResId);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Toaster setDuration(int mDuration)
|
||||
{
|
||||
|
||||
public Toaster setDuration(int mDuration) {
|
||||
this.mDuration = mDuration + REVEAL_ANIM_DURATION;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int getDuration()
|
||||
{
|
||||
public int getDuration() {
|
||||
return mDuration;
|
||||
}
|
||||
|
||||
public Toaster setType(Type type)
|
||||
{
|
||||
|
||||
public Toaster setType(Type type) {
|
||||
this.mType = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Type getType()
|
||||
{
|
||||
|
||||
public Type getType() {
|
||||
return mType;
|
||||
}
|
||||
|
||||
public Toaster setGravity(Gravity mGravity)
|
||||
{
|
||||
public Toaster setGravity(Gravity mGravity) {
|
||||
this.mGravity = mGravity;
|
||||
return this;
|
||||
}
|
||||
|
||||
private int toPx(int dp)
|
||||
{
|
||||
|
||||
private int toPx(int dp) {
|
||||
return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, mContext.getResources().getDisplayMetrics()));
|
||||
}
|
||||
|
||||
public Gravity getGravity()
|
||||
{
|
||||
public Gravity getGravity() {
|
||||
return mGravity;
|
||||
}
|
||||
|
||||
public AnimatedVectorDrawableCompat getIcon()
|
||||
{
|
||||
|
||||
public AnimatedVectorDrawableCompat getIcon() {
|
||||
return mIcon;
|
||||
}
|
||||
|
||||
public Drawable getBackroundDrawable()
|
||||
{
|
||||
|
||||
public Drawable getBackroundDrawable() {
|
||||
return mDrawable;
|
||||
}
|
||||
|
||||
public int getIconColor()
|
||||
{
|
||||
|
||||
public int getIconColor() {
|
||||
return mIconColor;
|
||||
}
|
||||
|
||||
public enum Type
|
||||
{
|
||||
|
||||
public enum Type {
|
||||
ERROR,
|
||||
SUCCESS,
|
||||
INFO
|
||||
}
|
||||
|
||||
public enum Gravity
|
||||
{
|
||||
}
|
||||
|
||||
public enum Gravity {
|
||||
TOP_LEFT,
|
||||
TOP_RIGHT,
|
||||
BOTTOM_LEFT,
|
||||
BOTTOM_RIGHT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_install_apks">Install APK(s)</string>
|
||||
<string name="title_clear_output">Clear output</string>
|
||||
<string name="msg_gradlew_installation_failed">Failed to install Gradle Wrapper: %s</string>
|
||||
<string name="msg_installing_gradlew">Gradle Wrapper is not available!\nInstalling default one. Gradle v7.1.1 will be downloaded if necessary.</string>
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ buildscript {
|
||||
javaSourceVersion = JavaVersion.VERSION_1_8
|
||||
javaTargetVersion = JavaVersion.VERSION_1_8
|
||||
|
||||
stringfogEnabled = true
|
||||
stringfogEnabled = false
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
||||
Reference in New Issue
Block a user