diff --git a/another-app/build.gradle b/another-app/build.gradle index 8c7575874..3d3f04998 100644 --- a/another-app/build.gradle +++ b/another-app/build.gradle @@ -34,8 +34,7 @@ android { } dependencies { - implementation deps.support.appCompat - implementation deps.support.v4 + implementation deps.androidx.appCompat implementation project(":libraries:javalibrary") implementation project(":libraries:emptylibrary") implementation project(":libraries:parcelable") diff --git a/another-app/proguard-android.txt b/another-app/proguard-android.txt index 86fd3765d..22f5cb6d2 100644 --- a/another-app/proguard-android.txt +++ b/another-app/proguard-android.txt @@ -27,13 +27,6 @@ -keepattributes SourceFile,LineNumberTable -renamesourcefileattribute SourceFile --keep public class com.google.vending.licensing.ILicensingService --keep public class com.android.vending.licensing.ILicensingService --keep public class com.google.android.vending.licensing.ILicensingService --dontnote com.android.vending.licensing.ILicensingService --dontnote com.google.vending.licensing.ILicensingService --dontnote com.google.android.vending.licensing.ILicensingService - # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native ; @@ -73,27 +66,4 @@ @android.webkit.JavascriptInterface ; } -# The support libraries contains references to newer platform versions. -# Don't warn about those in case this app is linking against an older -# platform version. We know about them, and they are safe. --dontnote android.support.** --dontwarn android.support.** - -# Understand the @Keep support annotation. --keep class android.support.annotation.Keep - --keep @android.support.annotation.Keep class * {*;} - --keepclasseswithmembers class * { - @android.support.annotation.Keep ; -} - --keepclasseswithmembers class * { - @android.support.annotation.Keep ; -} - --keepclasseswithmembers class * { - @android.support.annotation.Keep (...); -} - -dontwarn java.lang.invoke.** diff --git a/another-app/src/com/uber/okbuck/example/anotherapp/CustomView.java b/another-app/src/com/uber/okbuck/example/anotherapp/CustomView.java index 65112a06a..776dd15db 100644 --- a/another-app/src/com/uber/okbuck/example/anotherapp/CustomView.java +++ b/another-app/src/com/uber/okbuck/example/anotherapp/CustomView.java @@ -1,7 +1,7 @@ package com.uber.okbuck.example.anotherapp; import android.content.Context; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.widget.AppCompatTextView; import android.util.AttributeSet; public class CustomView extends AppCompatTextView { diff --git a/another-app/src/com/uber/okbuck/example/anotherapp/MainActivity.java b/another-app/src/com/uber/okbuck/example/anotherapp/MainActivity.java index 46be165a8..3a5ba7116 100644 --- a/another-app/src/com/uber/okbuck/example/anotherapp/MainActivity.java +++ b/another-app/src/com/uber/okbuck/example/anotherapp/MainActivity.java @@ -1,7 +1,7 @@ package com.uber.okbuck.example.anotherapp; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -27,7 +27,7 @@ protected void onCreate(Bundle savedInstanceState) { } void mTvTest() { - Log.d("TEST", "" + android.support.v7.appcompat.R.color.button_material_light); + Log.d("TEST", "" + androidx.appcompat.R.color.button_material_light); mTvTest.setText( new StringBuilder() .append("1 + 2 = ") diff --git a/app/build.gradle b/app/build.gradle index 2489e7f3d..2555a6998 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,5 @@ apply plugin: "com.android.application" apply plugin: "com.jakewharton.butterknife" -apply plugin: "com.squareup.sqldelight" android { defaultConfig { @@ -9,7 +8,7 @@ android { buildConfigField "boolean", "CAN_JUMP", "true" buildConfigField "boolean", "XLOG_ENABLED", "true" buildConfigField "int", "EXOPACKAGE_FLAGS", "0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // If app doesn"t specify dimensions, use missingDimensionStrategy // https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#resolve_matching_errors @@ -61,10 +60,10 @@ dependencies { implementation deps.external.rxjava implementation deps.external.rxandroid implementation deps.external.rxPermissions - implementation deps.support.multidex + implementation deps.androidx.multidex implementation deps.external.butterKnife - implementation deps.support.design - implementation deps.support.recyclerView + implementation deps.androidx.material + implementation deps.androidx.recyclerView implementation deps.external.leakCanary implementation deps.external.xlogAndroidIdle @@ -80,9 +79,10 @@ dependencies { testImplementation deps.test.junit testImplementation deps.test.mockito - testImplementation deps.support.annotations + testImplementation deps.androidx.annotations androidTestImplementation deps.test.espressoCore + androidTestImplementation deps.test.espressoRules androidTestImplementation deps.test.espressoRunner } diff --git a/app/src/androidTest/AndroidManifest.xml b/app/src/androidTest/AndroidManifest.xml index f87715f0e..94723807d 100644 --- a/app/src/androidTest/AndroidManifest.xml +++ b/app/src/androidTest/AndroidManifest.xml @@ -3,7 +3,7 @@ diff --git a/app/src/androidTest/java/com/uber/okbuck/example/test/MainActivityTest.java b/app/src/androidTest/java/com/uber/okbuck/example/test/MainActivityTest.java index 882bd07f5..fe802f5be 100644 --- a/app/src/androidTest/java/com/uber/okbuck/example/test/MainActivityTest.java +++ b/app/src/androidTest/java/com/uber/okbuck/example/test/MainActivityTest.java @@ -1,13 +1,13 @@ package com.uber.okbuck.example.test; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import static junit.framework.Assert.assertEquals; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.rule.ActivityTestRule; +import androidx.test.runner.AndroidJUnit4; import com.uber.okbuck.example.MainActivity; import com.uber.okbuck.example.R; import org.junit.Rule; diff --git a/app/src/main/java/com/uber/okbuck/example/AppShell.java b/app/src/main/java/com/uber/okbuck/example/AppShell.java index cc85c6f82..bf669bc67 100644 --- a/app/src/main/java/com/uber/okbuck/example/AppShell.java +++ b/app/src/main/java/com/uber/okbuck/example/AppShell.java @@ -1,6 +1,6 @@ package com.uber.okbuck.example; -import android.support.multidex.MultiDex; +import androidx.multidex.MultiDex; import android.widget.Toast; import com.facebook.buck.android.support.exopackage.ExopackageApplication; import com.uber.okbuck.example.common.Calc; diff --git a/app/src/main/java/com/uber/okbuck/example/CollapsingAppBarActivity.java b/app/src/main/java/com/uber/okbuck/example/CollapsingAppBarActivity.java index 3a0e93654..c41f76550 100644 --- a/app/src/main/java/com/uber/okbuck/example/CollapsingAppBarActivity.java +++ b/app/src/main/java/com/uber/okbuck/example/CollapsingAppBarActivity.java @@ -2,11 +2,12 @@ import android.content.Context; import android.os.Bundle; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CoordinatorLayout; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -14,6 +15,8 @@ import android.widget.TextView; import android.widget.Toast; +import com.google.android.material.appbar.AppBarLayout; + public class CollapsingAppBarActivity extends AppCompatActivity { private final float APP_BAR_AUTO_COLLAPSE_RATION = 0.3F; RecyclerView mRecyclerView; diff --git a/app/src/main/java/com/uber/okbuck/example/CustomView.java b/app/src/main/java/com/uber/okbuck/example/CustomView.java index 01aec8917..7cbf8d8cb 100644 --- a/app/src/main/java/com/uber/okbuck/example/CustomView.java +++ b/app/src/main/java/com/uber/okbuck/example/CustomView.java @@ -1,7 +1,7 @@ package com.uber.okbuck.example; import android.content.Context; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.widget.AppCompatTextView; import android.util.AttributeSet; public class CustomView extends AppCompatTextView { diff --git a/app/src/main/java/com/uber/okbuck/example/MainActivity.java b/app/src/main/java/com/uber/okbuck/example/MainActivity.java index 306c0d6e9..3c506e386 100644 --- a/app/src/main/java/com/uber/okbuck/example/MainActivity.java +++ b/app/src/main/java/com/uber/okbuck/example/MainActivity.java @@ -5,7 +5,7 @@ import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.TextView; @@ -21,8 +21,6 @@ import com.uber.okbuck.example.dummylibrary.DummyActivity; import com.uber.okbuck.example.dummylibrary.DummyAndroidClass; import com.uber.okbuck.example.javalib.DummyJavaClass; -import com.uber.okbuck.example.sqldelightmodel.GithubRepo; -import com.uber.okbuck.example.sqldelightmodel.GithubUser; import com.uber.okbuck.java.Pojo; import com.uber.okbuck.kotlin.KotlinDataClass; import io.reactivex.Observer; @@ -107,10 +105,6 @@ public void onNext(String path) { @Override public void onSubscribe(Disposable disposable) {} }); - GithubUser user = GithubUser.create(100, "OkBuck"); - Toast.makeText(this, user.login(), Toast.LENGTH_SHORT).show(); - GithubRepo repo = GithubRepo.create(100, "OkBuck", "auto buck"); - Toast.makeText(this, repo.name() + ": " + repo.description(), Toast.LENGTH_SHORT).show(); KotlinDataClass data = new KotlinDataClass("foo", com.uber.okbuck.kotlin.android.R.string.foo); Pojo pojo = new Pojo(); diff --git a/app/src/main/java/com/uber/okbuck/example/MyApp.java b/app/src/main/java/com/uber/okbuck/example/MyApp.java index cfe6d43b2..1bcfee510 100644 --- a/app/src/main/java/com/uber/okbuck/example/MyApp.java +++ b/app/src/main/java/com/uber/okbuck/example/MyApp.java @@ -1,7 +1,7 @@ package com.uber.okbuck.example; import android.app.Application; -import android.support.v7.app.AppCompatDelegate; +import androidx.appcompat.app.AppCompatDelegate; import com.facebook.buck.android.support.exopackage.DefaultApplicationLike; import com.github.promeg.xlog_android.lib.XLogConfig; import com.squareup.leakcanary.LeakCanary; diff --git a/app/src/main/res/layout/activity_collapsing_app_bar.xml b/app/src/main/res/layout/activity_collapsing_app_bar.xml index d59e64b15..1a1d2b77a 100644 --- a/app/src/main/res/layout/activity_collapsing_app_bar.xml +++ b/app/src/main/res/layout/activity_collapsing_app_bar.xml @@ -14,13 +14,13 @@ android:layout_height="44dp" app:layout_scrollFlags="scroll|enterAlways" /> - - - + - - + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 20dd74d1d..f786fa81b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - } configurations.all { exclude group:"com.android.tools.build", module: "transform-api" + resolutionStrategy { + force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${deps.versions.kotlin}" + } } } @@ -113,10 +119,15 @@ def addCommonConfigurationForAndroidModules(Project project) { if (project.plugins.hasPlugin("com.squareup.sqldelight")) { variants.all { - Task okbuckTask = project.tasks.getByName("okbuck") - Task sqlDelightTask = project.tasks.getByName("generate${it.name.capitalize()}SqlDelightInterface") - okbuckTask.dependsOn(sqlDelightTask) - project.android.sourceSets."${it.name}".java.srcDirs += [sqlDelightTask.outputs.files[0] as String] + + project.android.sourceSets."${it.name}".java.srcDir project.file("build/generated/source/sqldelight") + project.android.sourceSets."${it.name}".kotlin.srcDir project.file("build/generated/source/sqldelight") + + project.afterEvaluate { proj -> + Task okbuckTask = proj.tasks.getByName("okbuck") + Task sqlDelightTask = proj.tasks.getByName("generate${it.name.capitalize()}SqlDelightInterface") + okbuckTask.dependsOn(sqlDelightTask) + } } } } @@ -131,7 +142,7 @@ okbuck { "app": [ "^com/uber/okbuck/example/AppShell^", "^com/uber/okbuck/example/BuildConfig^", - "^android/support/multidex/", + "^androidx/multidex/", "^com/facebook/buck/android/support/exopackage/", "^com/github/promeg/xlog_android/lib/XLogConfig^", "^com/squareup/leakcanary/LeakCanary^", @@ -145,19 +156,19 @@ okbuck { appLibDependencies = [ "appProd": [ "buck-android-support", - "com.android.support:multidex", + "androidx.multidex:multidex", "libraries/javalibrary:main", "libraries/common:paidRelease", ], "appDev" : [ "buck-android-support", - "com.android.support:multidex", + "androidx.multidex:multidex", "libraries/javalibrary:main", "libraries/common:freeDebug", ], "appDemo": [ "buck-android-support", - "com.android.support:multidex", + "androidx.multidex:multidex", "libraries/javalibrary:main", "libraries/common:paidRelease", ] @@ -207,6 +218,7 @@ okbuck { "com.android.tools.build:manifest-merger", "com.android.tools:dvlib", "org.ow2.asm:asm", + "org.ow2.asm:asm-commons", "com.google.protobuf:protobuf-java", "commons-codec:commons-codec", "com.google.errorprone:error_prone_annotations", @@ -232,6 +244,7 @@ okbuck { "com.android.tools:annotations", "com.android.tools.build:builder-test-api", "org.apache.httpcomponents:httpmime", + "androidx.annotation:annotation", ] allowAllVersions = [ "org.robolectric:android-all", diff --git a/buildSrc/src/main/java/com/uber/okbuck/OkBuckGradlePlugin.java b/buildSrc/src/main/java/com/uber/okbuck/OkBuckGradlePlugin.java index 74909d143..5ef3815ba 100644 --- a/buildSrc/src/main/java/com/uber/okbuck/OkBuckGradlePlugin.java +++ b/buildSrc/src/main/java/com/uber/okbuck/OkBuckGradlePlugin.java @@ -7,6 +7,7 @@ import com.uber.okbuck.core.manager.BuckManager; import com.uber.okbuck.core.manager.DependencyManager; import com.uber.okbuck.core.manager.GroovyManager; +import com.uber.okbuck.core.manager.JetifierManager; import com.uber.okbuck.core.manager.KotlinManager; import com.uber.okbuck.core.manager.LintManager; import com.uber.okbuck.core.manager.ManifestMergerManager; @@ -79,6 +80,7 @@ public class OkBuckGradlePlugin implements Plugin { public static final String OKBUCK_STATE = OKBUCK_STATE_DIR + "/STATE"; public final Map> scopes = new ConcurrentHashMap<>(); + public final Map poms = new ConcurrentHashMap<>(); public final Set exportedPaths = Sets.newConcurrentHashSet(); public DependencyCache depCache; @@ -90,6 +92,7 @@ public class OkBuckGradlePlugin implements Plugin { public KotlinManager kotlinManager; public ScalaManager scalaManager; public GroovyManager groovyManager; + public JetifierManager jetifierManager; public TransformManager transformManager; ManifestMergerManager manifestMergerManager; @@ -142,6 +145,9 @@ public void apply(Project rootProject) { // Create Scala Manager groovyManager = new GroovyManager(rootBuckProject); + // Create Jetifier Manager + jetifierManager = new JetifierManager(rootBuckProject); + // Create Robolectric Manager robolectricManager = new RobolectricManager(rootBuckProject); @@ -164,10 +170,11 @@ public void apply(Project rootProject) { task -> { annotationProcessorCache.finalizeProcessors(); dependencyManager.finalizeDependencies(); + jetifierManager.finalizeDependencies(); lintManager.finalizeDependencies(); kotlinManager.finalizeDependencies(); scalaManager.finalizeDependencies(); - groovyManager.finalDependencies(); + groovyManager.finalizeDependencies(); robolectricManager.finalizeDependencies(); transformManager.finalizeDependencies(); buckManager.finalizeDependencies(); @@ -242,6 +249,10 @@ public void apply(Project rootProject) { robolectricManager.download(); } + if (JetifierManager.isJetifierEnabled(rootProject)) { + jetifierManager.setupJetifier(okbuckExt.getJetifierExtension().version); + } + extraConfigurations.forEach( (cacheName, extraConfiguration) -> new DependencyCache( diff --git a/buildSrc/src/main/java/com/uber/okbuck/composer/android/AndroidLibraryRuleComposer.java b/buildSrc/src/main/java/com/uber/okbuck/composer/android/AndroidLibraryRuleComposer.java index 2a1378fdb..8eaa7d5f0 100644 --- a/buildSrc/src/main/java/com/uber/okbuck/composer/android/AndroidLibraryRuleComposer.java +++ b/buildSrc/src/main/java/com/uber/okbuck/composer/android/AndroidLibraryRuleComposer.java @@ -115,7 +115,7 @@ public static Rule compose( } return androidRule - .ruleType("okbuck_" + target.getRuleType().getBuckName()) + .ruleType(target.getRuleType().getBuckName()) .defaultVisibility() .deps(libraryDeps) .name(src(target)) diff --git a/buildSrc/src/main/java/com/uber/okbuck/composer/android/ExopackageAndroidLibraryRuleComposer.java b/buildSrc/src/main/java/com/uber/okbuck/composer/android/ExopackageAndroidLibraryRuleComposer.java index 7771c3fb6..031481468 100644 --- a/buildSrc/src/main/java/com/uber/okbuck/composer/android/ExopackageAndroidLibraryRuleComposer.java +++ b/buildSrc/src/main/java/com/uber/okbuck/composer/android/ExopackageAndroidLibraryRuleComposer.java @@ -52,7 +52,7 @@ public static Rule compose(AndroidAppTarget target) { } return androidRule - .ruleType("okbuck_" + target.getRuleType().getBuckName()) + .ruleType(target.getRuleType().getBuckName()) .defaultVisibility() .deps(deps) .name(appLib(target)) diff --git a/buildSrc/src/main/java/com/uber/okbuck/core/manager/GroovyManager.java b/buildSrc/src/main/java/com/uber/okbuck/core/manager/GroovyManager.java index f9db8e3ec..1b7a00340 100644 --- a/buildSrc/src/main/java/com/uber/okbuck/core/manager/GroovyManager.java +++ b/buildSrc/src/main/java/com/uber/okbuck/core/manager/GroovyManager.java @@ -56,7 +56,7 @@ public void setupGroovyHome() { startGroovy.setExecutable(true); } - public void finalDependencies() { + public void finalizeDependencies() { if (dependencies != null) { String groovyVersion = GroovySystem.getVersion(); diff --git a/buildSrc/src/main/java/com/uber/okbuck/core/manager/JetifierManager.java b/buildSrc/src/main/java/com/uber/okbuck/core/manager/JetifierManager.java new file mode 100644 index 000000000..e6fde02b5 --- /dev/null +++ b/buildSrc/src/main/java/com/uber/okbuck/core/manager/JetifierManager.java @@ -0,0 +1,116 @@ +package com.uber.okbuck.core.manager; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.sun.istack.Nullable; +import com.uber.okbuck.OkBuckGradlePlugin; +import com.uber.okbuck.composer.base.BuckRuleComposer; +import com.uber.okbuck.core.dependency.DependencyCache; +import com.uber.okbuck.core.model.base.RuleType; +import com.uber.okbuck.core.util.FileUtil; +import com.uber.okbuck.core.util.ProjectUtil; +import com.uber.okbuck.extension.JetifierExtension; +import com.uber.okbuck.template.core.Rule; +import com.uber.okbuck.template.java.Prebuilt; +import com.uber.okbuck.template.jvm.JvmBinaryRule; + +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.dsl.DependencyHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.Map; +import java.util.Set; + +public final class JetifierManager { + + private static final Logger LOG = LoggerFactory.getLogger(JetifierManager.class); + + private static final String JETIFIER_LOCATION = + OkBuckGradlePlugin.WORKSPACE_PATH + "/jetifier"; + private static final String JETIFIER_BUCK_FILE = JETIFIER_LOCATION + "/BUCK"; + private static final String JETIFIER_DEPS_CONFIG = "okbuck_jetifier_deps"; + private static final String JETIFIER_GROUP = "com.android.tools.build.jetifier"; + private static final String JETIFIER_CLI_CLASS = "com.android.tools.build.jetifier.standalone.Main"; + private static final String JETIFIER_BINARY_RULE_NAME = "okbuck_jetifier"; + private static final String COMMONS_CLI_DEP = "commons-cli:commons-cli:1.3.1"; + + private static final ImmutableList JETIFIER_MODULES = + ImmutableList.of( + "jetifier-core", + "jetifier-processor" + ); + private static final ImmutableList INTERNAL_MODULES = + ImmutableList.of( + "jetifier-standalone.jar" + ); + + @Nullable private Set dependencies; + private final Project project; + + public JetifierManager(Project project) { + this.project = project; + } + + public static boolean isJetifierEnabled(Project project) { + Map properties = project.getProperties(); + + if (properties.containsKey("android.useAndroidX") + && properties.containsKey("android.enableJetifier")) { + return (Boolean.valueOf((String) properties.get("android.useAndroidX"))) + && (Boolean.valueOf((String) properties.get("android.enableJetifier"))); + } + return false; + } + + public void setupJetifier(String version) { + if (!version.equals(JetifierExtension.DEFAULT_JETIFIER_VERSION)) { + LOG.warn("Using jetifier version other than %s; This might result in problems with the tool", + JetifierExtension.DEFAULT_JETIFIER_VERSION); + } + + Configuration jetifierConfig = project.getConfigurations().maybeCreate(JETIFIER_DEPS_CONFIG); + DependencyHandler handler = project.getDependencies(); + JETIFIER_MODULES + .stream() + .map(module -> String.format("%s:%s:%s", JETIFIER_GROUP, module, version)) + .forEach(dependency -> handler.add(JETIFIER_DEPS_CONFIG, dependency)); + handler.add(JETIFIER_DEPS_CONFIG, COMMONS_CLI_DEP); + + dependencies = new DependencyCache(project, ProjectUtil.getDependencyManager(project)).build(jetifierConfig); + } + + public void finalizeDependencies() { + if (dependencies != null && dependencies.size() > 0) { + ImmutableList.Builder rulesBuilder = new ImmutableList.Builder<>(); + ImmutableSet.Builder binaryDependencies = ImmutableSet.builder(); + binaryDependencies.addAll(BuckRuleComposer.external(dependencies)); + + new File(JETIFIER_LOCATION).mkdirs(); + for (String module : INTERNAL_MODULES) { + FileUtil.copyResourceToProject( + "jetifier/" + module, new File(JETIFIER_LOCATION, module)); + rulesBuilder.add( + new Prebuilt() + .prebuiltType(RuleType.PREBUILT_JAR.getProperties().get(0)) + .prebuilt(module) + .ruleType(RuleType.PREBUILT_JAR.getBuckName()) + .name(module)); + binaryDependencies.add(":" + module); + } + + rulesBuilder.add( + new JvmBinaryRule() + .mainClassName(JETIFIER_CLI_CLASS) + .deps(binaryDependencies.build()) + .ruleType(RuleType.JAVA_BINARY.getBuckName()) + .name(JETIFIER_BINARY_RULE_NAME) + .defaultVisibility()); + + File buckFile = project.getRootProject().file(JETIFIER_BUCK_FILE); + FileUtil.writeToBuckFile(rulesBuilder.build(), buckFile); + } + } +} diff --git a/buildSrc/src/main/java/com/uber/okbuck/core/model/base/RuleType.java b/buildSrc/src/main/java/com/uber/okbuck/core/model/base/RuleType.java index 88ff56c46..84c3c5d84 100644 --- a/buildSrc/src/main/java/com/uber/okbuck/core/model/base/RuleType.java +++ b/buildSrc/src/main/java/com/uber/okbuck/core/model/base/RuleType.java @@ -27,6 +27,8 @@ public enum RuleType { PREBUILT_NATIVE_LIBRARY, ROBOLECTRIC_TEST("java"); + private static final String OKBUCK_PREFIX = "okbuck_"; + private final ImmutableList properties; RuleType() { @@ -42,17 +44,26 @@ public List getProperties() { } public String getBuckName() { - @Var RuleType buckType = this; + @Var RuleType ruleType = this; + @Var Boolean insertOkBuckPrefix = false; switch (this) { case KOTLIN_ANDROID_LIBRARY: - buckType = ANDROID_LIBRARY; + case ANDROID_LIBRARY: + ruleType = ANDROID_LIBRARY; + insertOkBuckPrefix = true; break; case KOTLIN_ROBOLECTRIC_TEST: - buckType = ROBOLECTRIC_TEST; + case ROBOLECTRIC_TEST: + ruleType = ROBOLECTRIC_TEST; + break; + case ANDROID_PREBUILT_AAR: + insertOkBuckPrefix = true; break; default: break; } - return buckType.name().toLowerCase(); + + String prefix = insertOkBuckPrefix ? OKBUCK_PREFIX : ""; + return prefix + ruleType.name().toLowerCase(); } } diff --git a/buildSrc/src/main/java/com/uber/okbuck/core/task/OkBuckTask.java b/buildSrc/src/main/java/com/uber/okbuck/core/task/OkBuckTask.java index c05f40c13..330c29680 100644 --- a/buildSrc/src/main/java/com/uber/okbuck/core/task/OkBuckTask.java +++ b/buildSrc/src/main/java/com/uber/okbuck/core/task/OkBuckTask.java @@ -6,12 +6,14 @@ import com.uber.okbuck.OkBuckGradlePlugin; import com.uber.okbuck.composer.base.BuckRuleComposer; import com.uber.okbuck.core.manager.GroovyManager; +import com.uber.okbuck.core.manager.JetifierManager; import com.uber.okbuck.core.manager.KotlinManager; import com.uber.okbuck.core.manager.ScalaManager; import com.uber.okbuck.core.model.base.ProjectType; import com.uber.okbuck.core.util.FileUtil; import com.uber.okbuck.core.util.ProguardUtil; import com.uber.okbuck.core.util.ProjectUtil; +import com.uber.okbuck.extension.JetifierExtension; import com.uber.okbuck.extension.KotlinExtension; import com.uber.okbuck.extension.OkBuckExtension; import com.uber.okbuck.extension.ScalaExtension; @@ -145,6 +147,7 @@ private void generate( .classpathMacro(CLASSPATH_ABI_MACRO) .lintJvmArgs(okbuckExt.getLintExtension().jvmArgs) .enableLint(!okbuckExt.getLintExtension().disabled) + .enableJetifier(JetifierManager.isJetifierEnabled(getProject().getRootProject())) .externalDependencyCache(okbuckExt.externalDependencyCache) .classpathExclusionRegex(okbuckExt.getLintExtension().classpathExclusionRegex) .useCompilationClasspath(okbuckExt.getLintExtension().useCompilationClasspath) diff --git a/buildSrc/src/main/java/com/uber/okbuck/extension/JetifierExtension.java b/buildSrc/src/main/java/com/uber/okbuck/extension/JetifierExtension.java new file mode 100644 index 000000000..b217f7d18 --- /dev/null +++ b/buildSrc/src/main/java/com/uber/okbuck/extension/JetifierExtension.java @@ -0,0 +1,13 @@ +package com.uber.okbuck.extension; + +public class JetifierExtension { + + public static final String DEFAULT_JETIFIER_VERSION = "1.0.0-beta02"; + + /** Jetifier jar version */ + public String version; + + JetifierExtension() { + version = DEFAULT_JETIFIER_VERSION; + } +} diff --git a/buildSrc/src/main/java/com/uber/okbuck/extension/OkBuckExtension.java b/buildSrc/src/main/java/com/uber/okbuck/extension/OkBuckExtension.java index e79604a3d..5dd893d3f 100644 --- a/buildSrc/src/main/java/com/uber/okbuck/extension/OkBuckExtension.java +++ b/buildSrc/src/main/java/com/uber/okbuck/extension/OkBuckExtension.java @@ -86,7 +86,7 @@ public class OkBuckExtension { /** The prebuilt buck binary to use */ @Input public String buckBinary = - "com.github.facebook:buck:a2ee1aa1fc42def4175bd67a1e4ba4b51e83de89@pex"; + "com.github.facebook:buck:33eaa0a2ad2b684a0ee126c242f64894b7a38623@pex"; private WrapperExtension wrapperExtension = new WrapperExtension(); private KotlinExtension kotlinExtension; @@ -96,6 +96,7 @@ public class OkBuckExtension { private TestExtension testExtension = new TestExtension(); private TransformExtension transformExtension = new TransformExtension(); private LintExtension lintExtension; + private JetifierExtension jetifierExtension; private ExternalDependenciesExtension externalDependenciesExtension; private VisibilityExtension visibilityExtension = new VisibilityExtension(); @@ -103,6 +104,7 @@ public OkBuckExtension(Project project) { buckProjects = project.getSubprojects(); kotlinExtension = new KotlinExtension(project); lintExtension = new LintExtension(project); + jetifierExtension = new JetifierExtension(); externalDependenciesExtension = new ExternalDependenciesExtension(project); } @@ -162,6 +164,14 @@ public LintExtension getLintExtension() { return lintExtension; } + public void jetifier(Action container) { + container.execute(jetifierExtension); + } + + public JetifierExtension getJetifierExtension() { + return jetifierExtension; + } + public void transform(Action container) { container.execute(transformExtension); } diff --git a/buildSrc/src/main/resources/com/uber/okbuck/core/util/jetifier/jetifier-standalone.jar b/buildSrc/src/main/resources/com/uber/okbuck/core/util/jetifier/jetifier-standalone.jar new file mode 100644 index 000000000..130642322 Binary files /dev/null and b/buildSrc/src/main/resources/com/uber/okbuck/core/util/jetifier/jetifier-standalone.jar differ diff --git a/buildSrc/src/main/rocker/com/uber/okbuck/template/config/BuckDefs.rocker.raw b/buildSrc/src/main/rocker/com/uber/okbuck/template/config/BuckDefs.rocker.raw index 81ccc57ea..0477a4faa 100644 --- a/buildSrc/src/main/rocker/com/uber/okbuck/template/config/BuckDefs.rocker.raw +++ b/buildSrc/src/main/rocker/com/uber/okbuck/template/config/BuckDefs.rocker.raw @@ -5,6 +5,7 @@ String classpathMacro, String lintJvmArgs, String externalDependencyCache, boolean enableLint, +boolean enableJetifier, boolean useCompilationClasspath, String classpathExclusionRegex ) @@ -252,3 +253,29 @@ def okbuck_keystore( properties = ':' + properties_rule, visibility = ['PUBLIC'], ) + +def okbuck_android_prebuilt_aar( + name, + aar, + **kwargs + ): +@if(enableJetifier) { + jetified = name.replace('.aar', '-jetified.aar') + genname = "unjetified_" + name + genrule( + name = genname, + srcs = [aar], + out = jetified, + cmd = "$(exe //.okbuck/workspace/jetifier:okbuck_jetifier) -i $SRCS -o $OUT" + ) +} + + android_prebuilt_aar( + name = name, +@if(enableJetifier) { + aar = ":{}".format(genname), +} else { + aar = aar, +} + **kwargs + ) diff --git a/dependencies.gradle b/dependencies.gradle index 5927619d7..387fa9191 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,11 +2,14 @@ def versions = [ androidPlugin : "3.2.0", androidTools : "26.2.0", butterKnife : "9.0.0-SNAPSHOT", - dagger : "2.15", - kotlin : "1.2.61", + dagger : "2.16", + kotlin : "1.3.0", leakCanary : "1.5.4", rocker : "0.23.0", support : "28.0.0", + androidx : "1.0.0", + androidxMultidex : "2.0.0", + constraintLayout : "1.1.0", ] def build = [ @@ -25,7 +28,7 @@ def build = [ rockerPlugin : "gradle.plugin.com.fizzed:rocker-gradle-plugin:${versions.rocker}", rockerRuntime : "com.fizzed:rocker-runtime:${versions.rocker}", shadowJar : "com.github.jengelman.gradle.plugins:shadow:2.0.1", - sqlDelightPlugin : "com.squareup.sqldelight:gradle-plugin:0.7.0", + sqlDelightPlugin : "com.squareup.sqldelight:gradle-plugin:1.0.0-rc2", ] def buildConfig = [ @@ -71,21 +74,20 @@ def lint = [ lintTests : "com.android.tools.lint:lint-tests:${versions.androidTools}", ] -def support = [ - annotations : "com.android.support:support-annotations:${versions.support}", - appCompat : "com.android.support:appcompat-v7:${versions.support}", - design : "com.android.support:design:${versions.support}", - recyclerView : "com.android.support:recyclerview-v7:${versions.support}", - v4 : "com.android.support:support-v4:${versions.support}", - multidex : "com.android.support:multidex:1.0.3", - constraintLayout: "com.android.support.constraint:constraint-layout:1.0.2", +def androidx = [ + material : "com.google.android.material:material:${versions.androidx}", + annotations : "androidx.annotation:annotation:${versions.androidx}", + appCompat : "androidx.appcompat:appcompat:${versions.androidx}", + recyclerView : "androidx.recyclerview:recyclerview:${versions.androidx}", + multidex : "androidx.multidex:multidex:${versions.androidxMultidex}", + constraintLayout : "androidx.constraintlayout:constraintlayout:${versions.constraintLayout}" ] def test = [ assertj : "org.assertj:assertj-core:3.9.1", - espressoCore : "com.android.support.test.espresso:espresso-core:3.0.1", - espressoRules : "com.android.support.test:rules:1.0.1", - espressoRunner: "com.android.support.test:runner:1.0.1", + espressoCore : "androidx.test.espresso:espresso-core:3.1.0", + espressoRules : "androidx.test:rules:1.1.0", + espressoRunner: "androidx.test:runner:1.1.0-alpha3", junit : "junit:junit:4.12", kotlinTest : "org.jetbrains.kotlin:kotlin-test-junit:${versions.kotlin}", mockito : "org.mockito:mockito-core:2.15.0", @@ -101,7 +103,7 @@ ext.deps = [ "build" : build, "external": external, "lint" : lint, - "support" : support, + "androidx": androidx, "test" : test, "versions": versions ] diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..646c51b97 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +android.useAndroidX=true +android.enableJetifier=true diff --git a/kotlin-app/build.gradle b/kotlin-app/build.gradle index bd411cbdd..2c769d165 100644 --- a/kotlin-app/build.gradle +++ b/kotlin-app/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply plugin: "com.squareup.sqldelight" apply plugin: "kotlin-android" apply plugin: "kotlin-android-extensions" apply plugin: "kotlin-kapt" @@ -6,7 +7,7 @@ apply plugin: "kotlin-kapt" android { defaultConfig { applicationId "com.uber.okbuck.example" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } flavorDimensions "default" @@ -17,22 +18,29 @@ dependencies { implementation deps.apt.javax implementation deps.external.dagger implementation deps.external.daggerAndroid + implementation deps.external.gson kapt deps.apt.daggerCompiler kapt deps.apt.daggerAndroidProcessor + kapt deps.apt.autoValue + kapt deps.apt.autoValueAnnotations + kapt deps.apt.autoValueGson + + compileOnly deps.apt.autoValueAnnotations kaptTest deps.apt.daggerCompiler kaptAndroidTest deps.apt.daggerCompiler kaptAndroidTest deps.apt.daggerAndroidProcessor - implementation deps.support.appCompat - implementation deps.support.design - implementation deps.support.constraintLayout + implementation deps.androidx.appCompat + implementation deps.androidx.material + implementation deps.androidx.constraintLayout testImplementation deps.test.junit testImplementation deps.test.kotlinTest androidTestImplementation deps.test.espressoRunner androidTestImplementation deps.test.espressoCore + androidTestImplementation deps.test.espressoRules } diff --git a/kotlin-app/src/androidTest/AndroidManifest.xml b/kotlin-app/src/androidTest/AndroidManifest.xml index b45367633..ce417b108 100644 --- a/kotlin-app/src/androidTest/AndroidManifest.xml +++ b/kotlin-app/src/androidTest/AndroidManifest.xml @@ -3,7 +3,7 @@ diff --git a/kotlin-app/src/androidTest/java/com/uber/okbuck/example/MainActivityTest.kt b/kotlin-app/src/androidTest/java/com/uber/okbuck/example/MainActivityTest.kt index cca00fdfd..2ec854191 100644 --- a/kotlin-app/src/androidTest/java/com/uber/okbuck/example/MainActivityTest.kt +++ b/kotlin-app/src/androidTest/java/com/uber/okbuck/example/MainActivityTest.kt @@ -1,6 +1,6 @@ package com.uber.okbuck.example -import android.support.test.rule.ActivityTestRule +import androidx.test.rule.ActivityTestRule import org.junit.Rule import org.junit.Test diff --git a/kotlin-app/src/main/java/com/uber/okbuck/example/MainActivity.kt b/kotlin-app/src/main/java/com/uber/okbuck/example/MainActivity.kt index f9254233f..f35afa29e 100644 --- a/kotlin-app/src/main/java/com/uber/okbuck/example/MainActivity.kt +++ b/kotlin-app/src/main/java/com/uber/okbuck/example/MainActivity.kt @@ -1,6 +1,8 @@ package com.uber.okbuck.example import android.os.Bundle +import android.widget.Toast +import com.uber.okbuck.example.sqldelightmodel.GithubRepo import dagger.android.support.DaggerAppCompatActivity import kotlinx.android.synthetic.main.activity_main.* import javax.inject.Inject @@ -18,5 +20,8 @@ class MainActivity : DaggerAppCompatActivity() { fab.setOnClickListener { analytics.sendAnalyticsEvent("FAB Clicked") } + + val repo = GithubRepo.create(100, "OkBuck", "auto buck") + Toast.makeText(this, repo.name + ": " + repo.description, Toast.LENGTH_SHORT).show() } } diff --git a/app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubRepo.java b/kotlin-app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubRepo.java similarity index 87% rename from app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubRepo.java rename to kotlin-app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubRepo.java index 664fbad24..bb9e394bd 100644 --- a/app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubRepo.java +++ b/kotlin-app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubRepo.java @@ -5,7 +5,7 @@ import com.google.gson.TypeAdapter; @AutoValue -public abstract class GithubRepo implements GithubRepoModel { +public abstract class GithubRepo implements GithubRepos { public static TypeAdapter typeAdapter(final Gson gson) { return new AutoValue_GithubRepo.GsonTypeAdapter(gson); } diff --git a/app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubUser.java b/kotlin-app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubUser.java similarity index 87% rename from app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubUser.java rename to kotlin-app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubUser.java index bbbe06392..58d2fe9ed 100644 --- a/app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubUser.java +++ b/kotlin-app/src/main/java/com/uber/okbuck/example/sqldelightmodel/GithubUser.java @@ -5,7 +5,7 @@ import com.google.gson.TypeAdapter; @AutoValue -public abstract class GithubUser implements GithubUserModel { +public abstract class GithubUser implements GithubUsers { public static TypeAdapter typeAdapter(final Gson gson) { return new AutoValue_GithubUser.GsonTypeAdapter(gson); } diff --git a/kotlin-app/src/main/res/layout/activity_main.xml b/kotlin-app/src/main/res/layout/activity_main.xml index 87d72338e..9f6ac6458 100644 --- a/kotlin-app/src/main/res/layout/activity_main.xml +++ b/kotlin-app/src/main/res/layout/activity_main.xml @@ -1,5 +1,5 @@ - - - - + - - + diff --git a/kotlin-app/src/main/res/layout/content_main.xml b/kotlin-app/src/main/res/layout/content_main.xml index a9fb4f48a..7315e91d4 100644 --- a/kotlin-app/src/main/res/layout/content_main.xml +++ b/kotlin-app/src/main/res/layout/content_main.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/main/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubRepo.sq b/kotlin-app/src/main/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubRepo.sq similarity index 100% rename from app/src/main/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubRepo.sq rename to kotlin-app/src/main/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubRepo.sq diff --git a/app/src/dev/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubUser.sq b/kotlin-app/src/main/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubUser.sq similarity index 100% rename from app/src/dev/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubUser.sq rename to kotlin-app/src/main/sqldelight/com/uber/okbuck/example/sqldelightmodel/GithubUser.sq diff --git a/libraries/common/build.gradle b/libraries/common/build.gradle index a0ca80c26..fcc9010c8 100644 --- a/libraries/common/build.gradle +++ b/libraries/common/build.gradle @@ -17,6 +17,6 @@ android { } dependencies { - api deps.support.appCompat + api deps.androidx.appCompat implementation project(":libraries:parcelable") } diff --git a/libraries/emptylibrary/build.gradle b/libraries/emptylibrary/build.gradle index 22c382c77..56d177f86 100644 --- a/libraries/emptylibrary/build.gradle +++ b/libraries/emptylibrary/build.gradle @@ -7,9 +7,9 @@ android { } dependencies { - api deps.support.appCompat + api deps.androidx.appCompat - compileOnly deps.support.multidex + compileOnly deps.androidx.multidex testImplementation deps.test.junit testImplementation deps.test.robolectric diff --git a/libraries/javalibrary/build.gradle b/libraries/javalibrary/build.gradle index 1507ce46f..1b2eeed46 100644 --- a/libraries/javalibrary/build.gradle +++ b/libraries/javalibrary/build.gradle @@ -7,7 +7,7 @@ dependencies { annotationProcessor deps.apt.javax annotationProcessor deps.apt.daggerCompiler - compileOnly deps.support.annotations + compileOnly deps.androidx.annotations testImplementation deps.test.junit } diff --git a/libraries/kotlinandroidlibrary/build.gradle b/libraries/kotlinandroidlibrary/build.gradle index 10eb76613..3d3a552f9 100755 --- a/libraries/kotlinandroidlibrary/build.gradle +++ b/libraries/kotlinandroidlibrary/build.gradle @@ -8,9 +8,9 @@ androidExtensions { dependencies { api deps.external.kotlinStdlib - implementation deps.support.appCompat - implementation deps.support.constraintLayout - implementation deps.support.design + implementation deps.androidx.appCompat + implementation deps.androidx.constraintLayout + implementation deps.androidx.material testImplementation deps.test.junit testImplementation deps.test.kotlinTest @@ -29,6 +29,6 @@ android { } defaultConfig { - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } } diff --git a/libraries/kotlinandroidlibrary/src/androidTest/AndroidManifest.xml b/libraries/kotlinandroidlibrary/src/androidTest/AndroidManifest.xml index ba3feb3f3..db1e578ec 100644 --- a/libraries/kotlinandroidlibrary/src/androidTest/AndroidManifest.xml +++ b/libraries/kotlinandroidlibrary/src/androidTest/AndroidManifest.xml @@ -4,7 +4,7 @@ diff --git a/libraries/kotlinandroidlibrary/src/androidTest/java/com/uber/okbuck/java/KotlinLibActivityTest.kt b/libraries/kotlinandroidlibrary/src/androidTest/java/com/uber/okbuck/java/KotlinLibActivityTest.kt index a5fb57d72..2ccd7f80a 100644 --- a/libraries/kotlinandroidlibrary/src/androidTest/java/com/uber/okbuck/java/KotlinLibActivityTest.kt +++ b/libraries/kotlinandroidlibrary/src/androidTest/java/com/uber/okbuck/java/KotlinLibActivityTest.kt @@ -4,12 +4,12 @@ import android.content.Intent import org.junit.Rule import org.junit.Test import org.hamcrest.CoreMatchers.allOf -import android.support.test.rule.ActivityTestRule -import android.support.test.espresso.Espresso.onView -import android.support.test.espresso.assertion.ViewAssertions.matches -import android.support.test.espresso.matcher.ViewMatchers.isDisplayed -import android.support.test.espresso.matcher.ViewMatchers.withId -import android.support.test.espresso.matcher.ViewMatchers.withText +import androidx.test.rule.ActivityTestRule +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText import com.uber.okbuck.kotlin.android.R class KotlinLibActivityTest { diff --git a/libraries/kotlinandroidlibrary/src/main/java/com/uber/okbuck/java/KotlinLibActivity.kt b/libraries/kotlinandroidlibrary/src/main/java/com/uber/okbuck/java/KotlinLibActivity.kt index 3206ae612..27fb8dea5 100644 --- a/libraries/kotlinandroidlibrary/src/main/java/com/uber/okbuck/java/KotlinLibActivity.kt +++ b/libraries/kotlinandroidlibrary/src/main/java/com/uber/okbuck/java/KotlinLibActivity.kt @@ -1,8 +1,8 @@ package com.uber.okbuck.java import android.os.Bundle -import android.support.design.widget.Snackbar -import android.support.v7.app.AppCompatActivity +import androidx.appcompat.app.AppCompatActivity +import com.google.android.material.snackbar.Snackbar import com.uber.okbuck.kotlin.android.R import kotlinx.android.synthetic.main.activity_kotlin_lib.* diff --git a/libraries/kotlinandroidlibrary/src/main/res/layout/activity_kotlin_lib.xml b/libraries/kotlinandroidlibrary/src/main/res/layout/activity_kotlin_lib.xml index 6f907103c..1d4ef9e9d 100644 --- a/libraries/kotlinandroidlibrary/src/main/res/layout/activity_kotlin_lib.xml +++ b/libraries/kotlinandroidlibrary/src/main/res/layout/activity_kotlin_lib.xml @@ -1,5 +1,5 @@ - - - - + - - + diff --git a/libraries/kotlinandroidlibrary/src/main/res/layout/content_kotlin_lib.xml b/libraries/kotlinandroidlibrary/src/main/res/layout/content_kotlin_lib.xml index a33930737..a9e102cf4 100644 --- a/libraries/kotlinandroidlibrary/src/main/res/layout/content_kotlin_lib.xml +++ b/libraries/kotlinandroidlibrary/src/main/res/layout/content_kotlin_lib.xml @@ -1,5 +1,5 @@ - - + diff --git a/libraries/lintErrorLibrary/build.gradle b/libraries/lintErrorLibrary/build.gradle index 0fcaf9846..f351b0b15 100644 --- a/libraries/lintErrorLibrary/build.gradle +++ b/libraries/lintErrorLibrary/build.gradle @@ -6,7 +6,7 @@ dependencies { annotationProcessor deps.apt.butterKnifeCompiler - implementation deps.support.appCompat + implementation deps.androidx.appCompat implementation deps.external.butterKnife }