diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index d6a56099..69f162b2 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index 0b280778..ef7a2f7c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,15 +1,23 @@ apply plugin: 'com.android.application' -def AAVersion = '4.3.1' +def AAVersion = '4.4.0' +def SupportLibVersion = '28.0.0' + +configurations.all { + resolutionStrategy { + force "com.android.support:appcompat-v7:${SupportLibVersion}" + force "com.android.support:support-v4:${SupportLibVersion}" + } +} android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion versions.compile + buildToolsVersion versions.buildTool defaultConfig { applicationId "org.autojs.autojs" - minSdkVersion 17 - targetSdkVersion 23 - versionCode 421 - versionName "4.0.3 Alpha2" + minSdkVersion versions.mini + targetSdkVersion versions.target + versionCode 423 + versionName "4.0.3 Alpha4" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { @@ -24,7 +32,7 @@ android { } release { shrinkResources false - minifyEnabled true + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } @@ -70,83 +78,83 @@ repositories { } dependencies { - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - testCompile 'junit:junit:4.12' + testImplementation 'junit:junit:4.12' // Android Annotations annotationProcessor "org.androidannotations:androidannotations:$AAVersion" - compile "org.androidannotations:androidannotations-api:$AAVersion" + implementation "org.androidannotations:androidannotations-api:$AAVersion" // ButterKnife - compile('com.jakewharton:butterknife:8.6.0', { + implementation('com.jakewharton:butterknife:8.8.1', { exclude group: 'com.android.support' }) - annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' // Android supports - compile 'com.android.support:appcompat-v7:27.1.1' - compile 'com.android.support:cardview-v7:27.1.1' - compile 'com.android.support:design:27.1.1' - compile 'com.android.support:multidex:1.0.3' + implementation "com.android.support:appcompat-v7:${SupportLibVersion}" + implementation "com.android.support:cardview-v7:${SupportLibVersion}" + implementation "com.android.support:design:${SupportLibVersion}" + implementation 'com.android.support:multidex:1.0.3' // Personal libraries - compile 'com.github.hyb1996:MutableTheme:0.2.2' + implementation 'com.github.hyb1996:MutableTheme:0.2.2' // Material Dialogs - compile('com.afollestad.material-dialogs:core:0.9.2.3', { + implementation('com.afollestad.material-dialogs:core:0.9.2.3', { exclude group: 'com.android.support' }) // Common Markdown - compile 'com.github.atlassian:commonmark-java:commonmark-parent-0.9.0' + implementation 'com.github.atlassian:commonmark-java:commonmark-parent-0.9.0' // Android issue reporter (a github issue reporter) - compile('com.heinrichreimersoftware:android-issue-reporter:1.3.1', { + implementation('com.heinrichreimersoftware:android-issue-reporter:1.3.1', { exclude group: 'com.afollestad.material-dialogs' exclude group: 'com.android.support' }) //MultiLevelListView - compile 'com.github.hyb1996:android-multi-level-listview:1.1' + implementation 'com.github.hyb1996:android-multi-level-listview:1.1' //Licenses Dialog - compile 'de.psdev.licensesdialog:licensesdialog:1.8.1' + implementation 'de.psdev.licensesdialog:licensesdialog:1.8.1' //Expandable RecyclerView - compile 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1' + implementation 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1' //FlexibleDivider - compile 'com.yqritc:recyclerview-flexibledivider:1.4.0' + implementation 'com.yqritc:recyclerview-flexibledivider:1.4.0' //??? - compile 'com.wang.avi:library:2.1.3' + implementation 'com.wang.avi:library:2.1.3' //Commons-lang - compile 'org.apache.commons:commons-lang3:3.6' + implementation 'org.apache.commons:commons-lang3:3.6' //Expandable RecyclerView - compile 'com.thoughtbot:expandablerecyclerview:1.3' - compile('com.github.hyb1996:FloatingCircularActionMenu:0.0.4') - compile 'com.github.hyb1996:Auto.js-ApkBuilder:1.0.1' + implementation 'com.thoughtbot:expandablerecyclerview:1.3' + implementation('com.github.hyb1996:FloatingCircularActionMenu:0.0.4') + implementation 'com.github.hyb1996:Auto.js-ApkBuilder:1.0.1' // RxJava - compile "io.reactivex.rxjava2:rxjava:2.1.2" - compile 'io.reactivex.rxjava2:rxandroid:2.0.1' + implementation "io.reactivex.rxjava2:rxjava:2.1.2" + implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' // Retrofit - compile 'com.squareup.retrofit2:retrofit:2.3.0' - compile 'com.squareup.retrofit2:converter-gson:2.3.0' - compile 'com.squareup.retrofit2:converter-gson:2.3.0' - compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' + implementation 'com.squareup.retrofit2:retrofit:2.3.0' + implementation 'com.squareup.retrofit2:converter-gson:2.3.0' + implementation 'com.squareup.retrofit2:converter-gson:2.3.0' + implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' //Glide - compile('com.github.bumptech.glide:glide:4.2.0', { + implementation('com.github.bumptech.glide:glide:4.8.0', { exclude group: 'com.android.support' }) - annotationProcessor 'com.github.bumptech.glide:compiler:4.2.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0' //joda time - compile 'joda-time:joda-time:2.9.9' + implementation 'joda-time:joda-time:2.9.9' // Tasker Plugin - compile 'com.twofortyfouram:android-plugin-client-sdk-for-locale:4.0.3' + implementation 'com.twofortyfouram:android-plugin-client-sdk-for-locale:4.0.3' // Flurry - compile 'com.flurry.android:analytics:7.0.0@aar' + implementation 'com.flurry.android:analytics:7.0.0@aar' // Bugly - compile 'com.tencent.bugly:crashreport:2.6.6' + implementation 'com.tencent.bugly:crashreport:2.6.6' // MaterialDialogCommon - compile('com.afollestad.material-dialogs:commons:0.9.2.3', { + implementation('com.afollestad.material-dialogs:commons:0.9.2.3', { exclude group: 'com.android.support' }) debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1' // Optional, if you use support library fragments: debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.1' - compile project(':automator') - compile project(':common') - compile project(':autojs') + implementation project(':automator') + implementation project(':common') + implementation project(':autojs') implementation (name: 'ads8', ext: 'aar') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d68b0544..98304279 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ + + + sEditableFileExts = new HashSet<>(Arrays.asList( @@ -19,6 +21,7 @@ public class ExplorerFileItem implements ExplorerItem { private final ExplorerPage mParent; public ExplorerFileItem(PFile file, ExplorerPage parent) { + ObjectHelper.requireNonNull(file, "file"); mFile = file; mParent = parent; } diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java b/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java index 73d77eab..641adf46 100644 --- a/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java +++ b/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java @@ -8,11 +8,7 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.io.StringReader; -import java.net.Socket; import javax.annotation.Nullable; @@ -23,7 +19,6 @@ import okhttp3.Request; import okhttp3.Response; import okhttp3.WebSocket; import okhttp3.WebSocketListener; -import okio.ByteString; public class JsonWebSocket extends WebSocketListener { diff --git a/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooserDialogBuilder.java b/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooserDialogBuilder.java index abd73d02..9ed471b3 100644 --- a/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooserDialogBuilder.java +++ b/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooserDialogBuilder.java @@ -6,7 +6,6 @@ import android.support.annotation.StringRes; import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.pio.PFile; -import com.tencent.bugly.crashreport.BuglyLog; import org.autojs.autojs.R; import org.autojs.autojs.model.explorer.Explorer; diff --git a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java index c8d716dd..606485f7 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java @@ -176,6 +176,8 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega } private void setUpViewPagerFragmentBehaviors() { + + mPagerAdapter.setOnFragmentInstantiateListener((pos, fragment) -> { ((ViewPagerFragment) fragment).setFab(mFab); if (pos == mViewPager.getCurrentItem()) { diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java index 09643151..49e176eb 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java @@ -239,9 +239,9 @@ public class DrawerFragment extends android.support.v4.app.Fragment { SettingsActivity.selectThemeColor(getActivity()); } + @SuppressLint("CheckResult") private void enableAccessibilityServiceByRootIfNeeded() { Observable.fromCallable(() -> Pref.shouldEnableAccessibilityServiceByRoot() && !isAccessibilityServiceEnabled()) - .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(needed -> { if (needed) { diff --git a/autojs/build.gradle b/autojs/build.gradle index 9e221666..d2f8af64 100644 --- a/autojs/build.gradle +++ b/autojs/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion versions.compile + buildToolsVersion versions.buildTool defaultConfig { - minSdkVersion 17 - targetSdkVersion 25 + minSdkVersion versions.mini + targetSdkVersion versions.target versionCode 1 versionName "1.0" @@ -35,35 +35,34 @@ repositories { } dependencies { - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - testCompile 'junit:junit:4.12' - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'org.greenrobot:eventbus:3.0.0' - compile 'net.lingala.zip4j:zip4j:1.3.2' - compile('com.afollestad.material-dialogs:core:0.9.2.3', { + testImplementation 'junit:junit:4.12' + api fileTree(dir: 'libs', include: ['*.jar']) + api 'org.greenrobot:eventbus:3.0.0' + api 'net.lingala.zip4j:zip4j:1.3.2' + api('com.afollestad.material-dialogs:core:0.9.2.3', { exclude group: 'com.android.support' }) - compile 'com.android.support:design:25.4.0' - compile 'com.android.support:appcompat-v7:25.4.0' - compile 'com.github.hyb1996:EnhancedFloaty:0.21' - compile 'com.github.hyb1996:OpenCvLib:2.4.13.4-imgproc' - compile 'com.makeramen:roundedimageview:2.3.0' + api 'com.android.support:design:28.0.0' + api 'com.github.hyb1996:EnhancedFloaty:0.21' + api 'com.github.hyb1996:OpenCvLib:2.4.13.4-imgproc' + api 'com.makeramen:roundedimageview:2.3.0' // OkHttp - compile 'com.squareup.okhttp3:okhttp:3.9.0' + api 'com.squareup.okhttp3:okhttp:3.10.0' //JDeferred - compile 'org.jdeferred:jdeferred-android-aar:1.2.6' + api 'org.jdeferred:jdeferred-android-aar:1.2.6' //RootShell - compile 'com.github.Stericson:RootShell:1.6' + api 'com.github.Stericson:RootShell:1.6' // Gson - compile 'com.google.code.gson:gson:2.8.0' + api 'com.google.code.gson:gson:2.8.2' // Terminal emulator - compile(name: 'libtermexec-release', ext: 'aar') - compile(name: 'emulatorview-release', ext: 'aar') - compile(name: 'term-debug', ext: 'aar') - compile files('libs/rhino-1.7.7.2.jar') - compile project(path: ':common') - compile project(path: ':automator') + api(name: 'libtermexec-release', ext: 'aar') + api(name: 'emulatorview-release', ext: 'aar') + api(name: 'term-debug', ext: 'aar') + api files('libs/rhino-1.7.7.2.jar') + api project(path: ':common') + api project(path: ':automator') } diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java index 3d999f94..fee7546b 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java @@ -15,6 +15,10 @@ import com.stardust.automator.UiObjectCollection; import com.stardust.automator.filter.DfsFilter; import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; + import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS; import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT; import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE; @@ -98,6 +102,7 @@ public class UiSelector extends UiGlobalSelector { return regex; } + @Override public UiGlobalSelector classNameMatches(String regex) { return super.classNameMatches(convertRegex(regex)); diff --git a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java index 69c1980c..f135315b 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java +++ b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java @@ -93,10 +93,6 @@ public class ScriptCanvas { return mCanvas.save(); } - public int save(int saveFlags) { - return mCanvas.save(saveFlags); - } - public int saveLayer(@Nullable RectF bounds, @Nullable Paint paint, int saveFlags) { return mCanvas.saveLayer(bounds, paint, saveFlags); } diff --git a/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java index c2b6243a..fed1877b 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java @@ -5,6 +5,7 @@ import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.MessageQueue; +import android.util.Log; import com.stardust.autojs.core.looper.LooperHelper; import com.stardust.autojs.script.JavaScriptSource; @@ -44,6 +45,7 @@ public class LoopBasedJavaScriptEngine extends RhinoJavaScriptEngine { if (callback != null) callback.onResult(o); } catch (Exception e) { + Log.d("DDDDD", "execute: " + e.getMessage()); if (callback == null) { throw e; } else { diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java index 0b620be2..9f491a38 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java @@ -205,6 +205,7 @@ public class RhinoJavaScriptEngine extends JavaScriptEngine { @Override protected void observeInstructionCount(Context cx, int instructionCount) { if (Thread.currentThread().isInterrupted() && Looper.myLooper() != Looper.getMainLooper()) { + Log.d("DDDDD", "thread interrupt: " + Thread.currentThread()); throw new ScriptInterruptedException(); } } diff --git a/automator/build.gradle b/automator/build.gradle index 3ca16296..91363f60 100644 --- a/automator/build.gradle +++ b/automator/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '26.0.2' + compileSdkVersion versions.compile + buildToolsVersion versions.buildTool defaultConfig { - minSdkVersion 17 - targetSdkVersion 25 + minSdkVersion versions.mini + targetSdkVersion versions.target versionCode 1 versionName "1.0" @@ -33,10 +33,10 @@ repositories { } dependencies { - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.4.0' - compile project(path: ':common') + testImplementation 'junit:junit:4.12' + api 'com.android.support:appcompat-v7:28.0.0' + api project(path: ':common') } diff --git a/build.gradle b/build.gradle index 87c3cfd6..98210af6 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,11 @@ buildscript { repositories { - jcenter() google() + jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.4' } } @@ -18,9 +18,19 @@ allprojects { url "https://jitpack.io" } google() + maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } } task clean(type: Delete) { delete rootProject.buildDir } + +ext { + versions = [ + target: 28, + mini: 17, + compile: 28, + buildTool: '28.0.3' + ] +} diff --git a/common/build.gradle b/common/build.gradle index 00d806fb..445f3e62 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '26.0.2' + compileSdkVersion versions.compile + buildToolsVersion versions.buildTool defaultConfig { - minSdkVersion 17 - targetSdkVersion 25 + minSdkVersion versions.mini + targetSdkVersion versions.target versionCode 1 versionName "1.0" @@ -23,10 +23,10 @@ android { } dependencies { - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - testCompile 'junit:junit:4.12' - compile 'com.android.support:support-annotations:25.4.0' - compile 'com.github.hyb1996:settingscompat:1.1.5' + testImplementation 'junit:junit:4.12' + api 'com.android.support:support-annotations:28.0.0' + api 'com.github.hyb1996:settingscompat:1.1.5' } diff --git a/common/release/output.json b/common/release/output.json index 25bb428d..053960b0 100644 --- a/common/release/output.json +++ b/common/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":421},"path":"commonRelease-4.0.3 Alpha2.apk","properties":{"packageId":"org.autojs.autojs","split":"","minSdkVersion":"17"}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":423},"path":"commonRelease-4.0.3 Alpha4.apk","properties":{"packageId":"org.autojs.autojs","split":"","minSdkVersion":"17"}}] \ No newline at end of file diff --git a/common/src/main/java/com/stardust/util/ObjectHelper.java b/common/src/main/java/com/stardust/util/ObjectHelper.java new file mode 100644 index 00000000..090e6609 --- /dev/null +++ b/common/src/main/java/com/stardust/util/ObjectHelper.java @@ -0,0 +1,16 @@ +package com.stardust.util; + +public class ObjectHelper { + + public static void requireNonNull(Object obj, String name){ + if(obj == null){ + throw new NullPointerException(name + " should not be null"); + } + } + + public static void requireNonNull(Object obj){ + if(obj == null){ + throw new NullPointerException(); + } + } +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6fc53efd..2230d7d0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Nov 27 21:40:02 CST 2017 +#Fri Oct 05 23:57:16 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/inrt/build.gradle b/inrt/build.gradle index 7cc9d151..a4f6d49f 100644 --- a/inrt/build.gradle +++ b/inrt/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion '26.0.2' + compileSdkVersion versions.compile + buildToolsVersion versions.buildTool defaultConfig { applicationId "com.stardust.auojs.inrt" - minSdkVersion 17 - targetSdkVersion 23 + minSdkVersion versions.mini + targetSdkVersion versions.target versionCode 210 versionName "4.0.2 Alpha5" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -44,17 +44,16 @@ repositories { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:25.4.0' //Glide - compile('com.github.bumptech.glide:glide:4.2.0', { + implementation('com.github.bumptech.glide:glide:4.2.0', { exclude group: 'com.android.support' }) - testCompile 'junit:junit:4.12' - compile project(':automator') - compile project(':common') - compile project(':autojs') + testImplementation 'junit:junit:4.12' + implementation project(':automator') + implementation project(':common') + implementation project(':autojs') }