text:
Trying to think of a present for my husband, something differant.
Any ideas girls.
Thnx Izz
Trying to think of a present for my husband, something differant.
Any ideas girls.
Thnx Izz
If your husband is a hunter I have the gift package for you...
Holiday Special lr.jpg
you can find it at Illusion Systems website.
all i need for a present is a complete family and all the hugs and kisses of my love ones ..hope they will remember me this time of the year..
I think that he doesn't care about what he will get from you. I think that the one think he cares about is your love
Give him something that will remind him of you
Christmas Joy Radio - http://www.christmasjoy.uk.tp
What are his hobby's and interests?
If you would be willing to spend quite some money a nice watch with a personal inscription could also be nice.
What you give a husband for Christmas depends completely on his interests and personality. And when you really don't know what to give, ask him for a list.
"Hail him who saves you by his grace,
and crown him Lord of all."
I agree...ask him what he wants. Why guess.
Unless you take a risk and buy him something you actually love, hoping he will love it, too..
And so, as Tiny Tim observed, "God Bless us!! Everyone!!''
A Christmas Carol - Charles Dickens (1843)
hehe. nice thread. a car would definitely be nice.
Christmas Costumes - http://www.shopcomparecostumes.com/categories/545/Christmas-Costumes.html
I bought my husband a iPhone desktop stand that I found at newpcgadgets. He is always fumbling for his iPhone when he is on his computer. I like the black acrylic design.


text:
The Android Studio build system is based on Gradle, and the Android Gradle plugin adds several features that are specific to building Android apps. Although the Android plugin is typically updated in lock-step with Android Studio, the plugin (and the rest of the Gradle system) can run independent of Android Studio and be updated separately.
This page explains how to keep your Gradle tools up to date and what's in the recent updates.
For details about how to configure your Android builds with Gradle, see the following pages:
For more information about the Gradle build system, see the Gradle user guide.
Update the Android Gradle plugin
When you update Android Studio, you may receive a prompt to automatically update the Android Gradle plugin to the latest available version. You can choose to accept the update or manually specify a version based on your project's build requirements.
You can specify the plugin version in
either the File > Project
Structure > Project menu in Android Studio, or
the top-level
build.gradle file. The plugin version applies to
all modules built in that Android Studio project. The following example sets
the plugin to version 3.6.0 from the
build.gradle file:
buildscript { repositories { // Gradle 4.1 and higher include support for Google's Maven repo using // the google() method. And you need to include this repo to download // Android Gradle plugin 3.0.0 or higher. google() ... } dependencies { classpath 'com.android.tools.build:gradle:3.6.0' } }
Caution: You should not use dynamic dependencies in version
numbers, such as
'com.android.tools.build:gradle:2.+'. Using
this feature can cause unexpected version updates and difficulty resolving
version differences.
If the specified plugin version has not been downloaded, Gradle downloads it the next time you build your project or click Tools > Android > Sync Project with Gradle Files from the Android Studio menu bar.
Update Gradle
When you update Android Studio, you may receive a prompt to also update Gradle to the latest available version. You can choose to accept the update or manually specify a version based on your project's build requirements.
The following table lists which version of Gradle is required for each version of the Android Gradle plugin. For the best performance, you should use the latest possible version of both Gradle and the plugin.
|Plugin version
|Required Gradle version
|1.0.0 - 1.1.3
|2.2.1 - 2.3
|1.2.0 - 1.3.1
|2.2.1 - 2.9
|2.2.1 - 2.13
|2.0.0 - 2.1.2
|2.10 - 2.13
|2.1.3 - 2.2.3
|3.2.0 - 3.2.1
|3.3.0 - 3.3.2
|3.4.0 - 3.4.1
You can specify the Gradle version in either the File >
Project Structure > Project menu in
Android Studio, or by editing the Gradle distribution reference in the
gradle/wrapper/gradle-wrapper.properties file. The following
example sets the Gradle version to 5.4.1 in the
gradle-wrapper.properties file.
... distributionUrl = https\://services.gradle.org/distributions/gradle-5.4.1-all.zip ...
3.6.0 (February 2020)
This version of the Android plugin requires the following:
Gradle 5.6.4. To learn more, read the section about updating Gradle.
SDK Build Tools 28.0.3 or higher.
New features
This version of the Android Gradle plugin includes the following new features.
View Binding
View binding provides compile-time safety when referencing views in your code.
You can now replace
findViewById() with the auto-generated binding class
reference. To start using View binding, include the following in each module's
build.gradle file:
android {
viewBinding.enabled = true
To learn more, read the View Binding documentation.
Support for the Maven Publish plugin
The Android Gradle plugin includes support for the Maven Publish Gradle plugin, which allows you to publish build artifacts to an Apache Maven repository. The Android Gradle plugin creates a component for each build variant artifact in your app or library module that you can use to customize a publication to a Maven repository.
To learn more, go to the page about how to use the Maven Publish plugin.
New default packaging tool
When building the debug version of your app, the plugin uses a new
packaging tool, called zipflinger, to build your APK. This new tool should
provide build speed improvements. If the new packaging tool doesn't work as you
expect, please report a bug. You can revert to using the
old packaging tool by including the following in your
gradle.properties file:
Native build attribution
You can now determine the length of time it takes Clang to build and link each C/C++ file in your project. Gradle can output a Chrome trace that contains timestamps for these compiler events so you can better understand the time required to build your project. To output this build attribution file, do the following:
Add the flag
-Pandroid.enableProfileJson=truewhen running a Gradle build. For example:
gradlew assembleDebug -Pandroid.enableProfileJson=true
Open the Chrome browser and type
chrome://tracingin the search bar.
Click the Load button and navigate to
project-root/build/android-profileto find the file. The file is named
You can see the native build attribution data near the top of the viewer:
Behavior changes
When using this version of the plugin, you might encounter the following changes in behavior.
Native libraries packaged uncompressed by default
When you build your app, the plugin now sets
extractNativeLibs to
"false" by
default. That is, your native libraries are page aligned and packaged
uncompressed. While this results in a larger upload size, your users
benefit from the following:
- Smaller app install size because the platform can access the native libraries directly from the installed APK, without creating a copy of the libraries.
- Smaller download size because Play Store compression is typically better when you include uncompressed native libraries in your APK or Android App Bundle.
If you want the Android Gradle plugin to instead package compressed native libraries, include the following in your app's manifest:
... >
Default NDK version
If you download multiple versions of the NDK, the Android Gradle plugin now
selects a default version to use in compiling your source code files. Previously,
the plugin selected the latest downloaded version of the NDK. Use the
android.ndkVersion property in the module's
build.gradle file to override
the plugin-selected default.
Simplified R class generation
The Android Gradle plugin simplifies the compile classpath by generating only one R class for each library module in your project and sharing those R classes with other module dependencies. This optimization should result in faster builds, but it requires that you keep the following in mind:
- Because the compiler shares R classes with upstream module dependencies, it's important that each module in your project uses a unique package name.
- The visibility of a library's R class to other project dependencies is
determined by the configuration used to include the library as a dependency.
For example, if Library A includes Library B as an 'api' dependency, Library
A and other libraries that depend on Library A have access to Library B's R
class. However, other libraries might not have access to Library B's R class
If Library A uses the
implementationdependency configuration. To learn more, read about dependency configurations.
Remove resources missing from default configuration
For Library modules, if you include a resource for a language that you do not
include in the default set of resources—for example, if you include
hello_world as a string resource in
/values-es/strings.xml but you don't
define that resource in
/values/strings.xml—the Android Gradle plugin no
longer includes that resource when compiling your project. This behavior change
should result in fewer
Resource Not Found runtime exceptions and improved
build speed.
D8 now respects CLASS retention policy for annotations
When compiling your app, D8 now respects when annotations apply a CLASS retention policy, and those annotations are no longer available at runtime. This behavior also exists when setting the app's target SDK to API level 23, which previously allowed access to these annotations during runtime when compiling your app using older versions of the Android Gradle plugin and D8.
Other behavior changes
aaptOptions.noCompressis no longer case sensitive on all platforms (for both APK and bundles) and respects paths that use uppercase characters.
- Data binding is now incremental by default. To learn more, see issue #110061530.
- All unit tests, including Roboelectric unit tests, are now fully cacheable. To learn more, see issue #115873047.
Bug fixes
This version of the Android Gradle plugin includes the following bug fixes:
- Robolectric unit tests are now supported in library modules that use data binding. To learn more, see issue #126775542.
- You can now run
connectedAndroidTesttasks across multiple modules while Gradle's parallel execution mode is enabled.
Known issues
This section describes known issues that exist in Android Gradle plugin 3.6.0.
Slow performance of Android Lint task
Android Lint can take much longer to complete on some projects due to a regression in its parsing infrastructure, resulting in slower computation of inferred types for lambdas in certain code constructs.
The issue is reported as a bug in IDEA and will be fixed in Android Gradle Plugin 4.0.
Missing Manifest class
If your app defines custom permissions in its manifest, the Android Gradle
plugin typically generates a
Manifest.java class that includes your custom
permissions as string constants. The plugin packages this class with your app,
so you can more easily reference those permissions at runtime.
Generating the manifest class is broken in Android Gradle plugin 3.6.0. If you
build your app with this version of the plugin, and it references the manifest
class, you might see a
ClassNotFoundException exception. To resolve this
issue, do one of the following:
- Reference your custom permissions by their fully-qualified name. For example,
Define your own constants, as shown below:
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; }
3.5.0 (August 2019)
Android Gradle plugin 3.5.0, along with Android Studio 3.5, is a major release and a result of Project Marble, which is a focus on improving three main areas of the Android developer tools: system health, feature polish, and fixing bugs. Notably, improving project build speed was a main focus for this update.
For information about these and other Project Marble updates, read the Android Developers blog post or the sections below.
This version of the Android plugin requires the following:
Gradle 5.4.1. To learn more, read the section about updating Gradle.
SDK Build Tools 28.0.3 or higher.
3.5.3 (December 2019)
This minor update supports Android Studio 3.5.3 and includes various bug fixes and performance improvements.
3.5.2 (November 2019)
This minor update supports Android Studio 3.5.2 and includes various bug fixes and performance improvements. To see a list of noteable bug fixes, read the related post on the Release Updates blog.
3.5.1 (October 2019)
This minor update supports Android Studio 3.5.1 and includes various bug fixes and performance improvements. To see a list of noteable bug fixes, read the related post on the Release Updates blog.
Incremental annotation processing
The Data Binding annotation
processor supports incremental annotation
if you set
in your
gradle.properties file. This optimization results in improved
incremental build performance. For a full list of optimized annotation
processors, refer to the table of incremental annotation
Additionally, KAPT 1.3.30 and higher also support incremental annotation
processors, which you can enable by including
kapt.incremental.apt=true in
gradle.properties file.
Cacheable unit tests
When you enable unit tests to use Android resources, assets, and manifests by
true, the Android Gradle plugin generates a test config file
containing absolute paths, which breaks cache relocatability. You can instruct
the plugin to instead generate the test config using relative paths, which
allows the
AndroidUnitTest task to be fully cacheable, by including the
following in your
gradle.properties file:
android.testConfig.useRelativePath = true
Known issues
When using Kotlin Gradle plugin 1.3.31 or earlier, you might see the following warning when building or syncing your project:
WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
To resolve this issue, upgrade the plugin to version 1.3.40 or higher.
3.4.0 (April 2019)
This version of the Android plugin requires the following:
Gradle 5.1.1 or higher. To learn more, read the section about updating Gradle.
SDK Build Tools 28.0.3 or higher.
3.4.2 (July 2019)
This minor update supports Android Studio 3.4.2 and includes various bug fixes and performance improvements. To see a list of noteable bug fixes, read the related post on the Release Updates blog.
3.4.1 (May 2019)
This minor update supports Android Studio 3.4.1 and includes various bug fixes and performance improvements. To see a list of noteable bug fixes, read the related post on the Release Updates blog.
New features
New lint check dependency configurations: The behavior of
lintCheckshas changed and a new dependency configuration,
lintPublish, has been introduced to give you more control over which lint checks are packaged in your Android libraries.
lintChecks: This is an existing configuration that you should use for lint checks you want to only run when building your project locally. If you were previously using the
lintChecksdependency configuration to include lint checks in the published AAR, you need to migrate those dependencies to instead use the new
lintPublishconfiguration described below.
lintPublish: Use this new configuration in library projects for lint checks you want to include in the published AAR, as shown below. This means that projects that consume your library also apply those lint checks.
The following code sample uses both dependency configurations in a local Android library project.
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks project(':lint') // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish project(':lintpublish') }
In general, packaging and signing tasks should see an overall build speed improvement. If you notice a performance regression related to these tasks, please report a bug.
Behavior changes
Android Instant Apps Feature plugin deprecation warning: If you're still using the
com.android.featureplugin to build your instant app, Android Gradle plugin 3.4.0 will give throw you a deprecation warning. To make sure you can still build you instant app on future versions of the plugin, migrate your instant app to using the dynamic feature plugin, which also allows you to publish both your installed and instant app experiences from a single Android App Bundle.
R8 enabled by default: R8 integrates desugaring, shrinking, obfuscating, optimizing, and dexing all in one step—resulting in noticeable build performance improvements. R8 was introduced in Android Gradle plugin 3.3.0 and is now enabled by default for both app and Android library projects using plugin 3.4.0 and higher.
The image below provides a high-level overview of the compile process before R8 was introduced.
Now, with R8, desugaring, shrinking, obfuscating, optimizing, and dexing (D8) are all completed in one step, as illustrated below.
Keep in mind, R8 is designed to work with your existing ProGuard rules, so you'll likely not need to take any actions to benefit from R8. However, because it's a different technology to ProGuard that's designed specifically for Android projects, shrinking and optimization may result in removing code that ProGuard may have not. So, in this unlikely situation, you might need to add additional rules to keep that code in your build output.
If you experience issues using R8, read the R8 compatibility FAQ to check if there's a solution to your issue. If a solution isn't documented, please report a bug. You can disable R8 by adding one of the following lines to your project's
# Disables R8 for Android Library modules only. android.enableR8.libraries = false # Disables R8 for all modules. android.enableR8 = false
ndkCompileis deprecated: You now get a build error if you try to use
ndkBuildto compile your native libraries. You should instead use either CMake or ndk-build to Add C and C++ code to your project.
Known issues
The correct usage of unique package names are currently not enforced but will become more strict on later versions of the plugin. On Android Gradle plugin version 3.4.0, you can opt-in to check whether your project declares acceptable package names by adding the line below to your
android.uniquePackageNames = true
To learn more about setting a package name through the Android Gradle plugin, see Set the application ID.
3.3.0 (January 2019)
This version of the Android plugin requires the following:
Gradle 4.10.1 or higher. To learn more, read the section about updating Gradle.
SDK Build Tools 28.0.3 or higher.
3.3.2 (March 2019)
This minor update supports Android Studio 3.3.2 and includes various bug fixes and performance improvements. To see a list of noteable bug fixes, read the related post on the Release Updates blog.
3.3.1 (February 2019)
This minor update supports Android Studio 3.3.1 and includes various bug fixes and performance improvements.
New features
Improved classpath synchronization: When resolving dependencies on your runtime and compile time classpaths, the Android Gradle plugin attempts to fix certain downstream version conflicts for dependencies that appear across multiple classpaths.
For example, if the runtime classpath includes Library A version 2.0 and the compile classpath includes Library A version 1.0, the plugin automatically updates the dependency on the compile classpath to Library A version 2.0 to avoid errors.
However, if the runtime classpath includes Library A version 1.0 and the compile includes Library A version 2.0, the plugin does not downgrade the dependency on the compile classpath to Library A version 1.0, and you will get an error. To learn more, see Fix conflicts between classpaths.
Improved incremental Java compilation when using annotation processors: This update decreases build time by improving support for incremental Java compilation when using annotation processors.
- For projects using Kapt (most Kotlin-only projects and Kotlin-Java hybrid projects): Incremental Java compilation is enabled, even when you use data binding or the retro-lambda plugin. Annotation processing by the Kapt task is not yet incremental.
For projects not using Kapt (Java-only projects): If the annotation processors you use all support incremental annotation processing, incremental Java compilation is enabled by default. To monitor incremental annotation processor adoption, watch Gradle issue 5277.
If, however, one or more annotation processors do not support incremental builds, incremental Java compilation is not enabled. Instead, you can include the following flag in your
When you include this flag, the Android Gradle plugin executes the annotation processors in a separate task and allows the Java compilation task to run incrementally.
Better debug info when using obsolete API: When the plugin detects that you're using an API that's no longer supported, it can now provide more-detailed information to help you determine where that API is being used. To see the additional info, you need to include the following in your project's
You can also enable the flag by passing
-Pandroid.debug.obsoleteApi=truefrom the command line.
You can run instrumentation tests on dynamic feature modules from the command line.
Behavior changes
Lazy task configuration: The plugin now uses Gradle's new task creation API to avoid initializing and configuring tasks that are not required to complete the current build (or tasks not on the execution task graph). For example, if you have multiple build variants, such as "release" and "debug" build variants, and you're building the "debug" version of your app, the plugin avoids initializing and configuring tasks for the "release" version of your app.
Calling certain older methods in the Variants API, such as
variant.getJavaCompile(), might still force task configuration. To make sure that your build is optimized for lazy task configuration, invoke new methods that instead return a
TaskProviderobject, such as
If you execute custom build tasks, learn how to adapt to Gradle's new task-creation API.
For a given build type, when setting
useProguard false, the plugin now uses R8 instead of ProGuard to shrink and obfuscate your app's code and resources. To learn more about R8, read this blog post from the Android Developer's Blog.
Faster R class generation for library projects: Previously, the Android Gradle plugin would generate an
R.javafile for each of your project's dependencies and then compile those R classes alongside your app's other classes. The plugin now generates a JAR containing your app's compiled R class directly, without first building intermediate
R.javaclasses. This optimization may significantly improve build performance for projects that include many library subprojects and dependencies, and improve the indexing speed in Android Studio.
When building an Android App Bundle, APKs generated from that app bundle that target Android 6.0 (API level 23) or higher now include uncompressed versions of your native libraries by default. This optimization avoids the need for the device to make a copy of the library and thus reduces the on-disk size of your app. If you'd rather disable this optimization, add the following to your
android.bundle.enableUncompressedNativeLibs = false
The plugin enforces minimum versions of some third-party plugins.
Single-variant project sync: Syncing your project with your build configuration is an important step in letting Android Studio understand how your project is structured. However, this process can be time-consuming for large projects. If your project uses multiple build variants, you can now optimize project syncs by limiting them to only the variant you have currently selected.
You need to use Android Studio 3.3 or higher with Android Gradle Plugin 3.3.0 or higher to enable this optimization. When you meet these requirements, the IDE prompts you to enable this optimization when you sync your project. The optimization is also enabled by default on new projects.
To enable this optimization manually, click File > Settings > Experimental > Gradle (Android Studio > Preferences > Experimental > Gradle on a Mac) and select the Only sync the active variant checkbox.
Note: This optimization fully supports projects that include Java and C++ languages, and has some support for Kotlin. When enabling the optimization for projects with Kotlin content, Gradle sync falls back to using full variants internally.
Automatic downloading of missing SDK packages: This functionality has been expanded to support NDK. To learn more, read Auto-download missing packages with Gradle.
Bug Fixes
Android Gradle plugin 3.3.0 fixes the following issues:
- The build process calling
android.support.v8.renderscript.RenderScriptinstead of the AndroidX version, despite Jetifier being enabled
- Clashes due to
androidx-rs.jarincluding statically bundled
- When using RenderScript, you no longer have to manually set the Build Tools
version in your
- The build process calling
3.2.0 (September 2018)
This version of the Android plugin requires the following:
- Gradle 4.6 or higher. To learn more, read the section about updating Gradle.
- SDK Build Tools 28.0.3 or higher.
3.2.1 (October 2018)
With this update, you no longer need to specify a version for the SDK Build Tools. The Android Gradle plugin now uses version 28.0.3 by default.
New features
Support for building Android App Bundles: The app bundle is a new upload format that includes all your app's compiled code and resources while deferring APK generation and signing to the Google Play Store. You no longer have to build, sign, and manage multiple APKs, and users get smaller downloads that are optimized for their device. To learn more, read About Android App Bundles.
Support for improved incremental build speeds when using annotation processors: The
AnnotationProcessorOptionsDSL now extends
CommandLineArgumentProvider, which enables either you or the annotation processor author to annotate arguments for the processor using incremental build property type annotations. Using these annotations improves the correctness and performance of incremental and cached clean builds. To learn more, read Pass arguments to annotation processors.
Migration tool for AndroidX: When using Android Gradle plugin 3.2.0 with Android 3.2 and higher, you can migrate your project's local and Maven dependencies to use the new AndroidX libraries by selecting Refactor > Migrate to AndroidX from the menu bar. Using this migration tool also sets the following flags to
truein your
android.useAndroidX: When set to
true, the Android plugin uses the appropriate AndroidX library instead of a Support Library. When this flag is not specified, the plugin sets it to
falseby default.
android.enableJetifier: When set to
true, the Android plugin automatically migrates existing third-party libraries to use AndroidX by rewriting their binaries. When this flag is not specified, the plugin sets it to
falseby default. You can set this flag to
trueonly while
android.useAndroidXis also set to
true, otherwise you get a build error.
To learn more, read the AndroidX overview.
New code shrinker, R8: R8 is a new tool for code shrinking and obfuscation that replaces ProGuard. You can start using the preview version of R8 by including the following in your project's
android.enableR8 = true
Behavior changes
- Desugaring with D8 is now enabled by default.
AAPT2 is now on Google's Maven repo. To use AAPT2, make sure that you have the
google()dependency in your
build.gradlefile, as shown below:
buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() }
Native multidex is now enabled by default. Previous versions of Android Studio enabled native multidex when deploying the debug version of an app to a device running Android API level 21 or higher. Now, whether you're deploying to a device or building an APK for release, the Android Gradle plugin enables native multidex for all modules that set
minSdkVersion=21or higher.
The plugin now enforces a minimum version of the protobuf plugin (0.8.6), Kotlin plugin (1.2.50), and Crashlytics plugin (1.25.4).
The feature module plugin,
com.android.feature, now enforces the use of only letters, digits, and underscores when specifying a module name. For example, if your feature module name includes dashes, you get a build error. This behavior matches that of the dynamic feature module plugin.
Bug fixes
- JavaCompile is now cacheable in projects with data binding. (Issue #69243050)
- Better compile avoidance for library modules with data binding. (Issue #77539932)
- You can now re-enable configure-on-demand if you've disable it in earlier versions due to some unpredictable build errors. (Issue #77910727)
3.1.0 (March 2018)
This version of the Android plugin requires the following:
- Gradle 4.4 or higher. To learn more, read the section about updating Gradle.
- Build Tools 27.0.3 or higher.
Keep in mind, you no longer need to specify a version for the build
tools using the
android.buildToolsVersionproperty—the plugin uses the minimum required version by default.
New DEX compiler, D8
By default, Android Studio now uses a new DEX
compiler called D8. DEX compilation is the process of transforming
bytecode into
.dex bytecode for the Android Runtime (or Dalvik, for older
versions of Android). Compared to the previous compiler, called DX, D8
compiles faster and outputs smaller DEX files, all while having the same or
better app runtime performance.
D8 shouldn't change your day-to-day app development workflow. However, if you
experience any issues related to the new compiler, please
report a bug. You can temporarily disable D8 and
use DX by including the following in your project's
gradle.properties file:
For projects that
use Java 8 language features,
incremental desugaring is enabled by default. You can disable it by
specifying the following in your project's
gradle.properties file:
Preview users: If you're already using a preview version of D8, note that it now compiles against libraries included in the SDK build tools—not the JDK. So, if you are accessing APIs that exist in the JDK but not in the SDK build tools libraries, you get a compile error.
Behavior changes
When building multiple APKs that each target a different ABI, the plugin no longer generates APKs for the following ABIs by default:
mips64, and
If you want to build APKs that target these ABIs, you must use NDK r16b or lower and specify the ABIs in your
build.gradlefile, as shown below:
splits { abi { include 'armeabi', 'mips', 'mips64' ... } }
When building configuration APKs for an Android Instant App, language configuration splits are now grouped by the root language by default. For example, if your app includes resources for
zh-CNlocales, Gradle will package those resources in a
zhlanguage configuration split. You can override this behavior by defining your own groups using the
includeproperty, as shown below:
splits { language { enable true // Each string defines a group of locales that // Gradle should package together. include "in,id", "iw,he", "fil,tl,tgl", "yue,zh,zh-TW,zh-CN" } }
The Android plugin's build cache now evicts cache entries that are older than 30 days.
resConfigno longer automatically picks string resources to package into your APK. If you continue to use
"auto", the plugin packages all string resources your app and its dependencies provide. So, you should instead specify each locale that you want the plugin to package into your APK.
Because local modules can't depend on your app's test APK, adding dependencies to your instrumented tests using the
androidTestApiconfiguration, instead of
androidTestImplementation, causes Gradle to issue the following warning:
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'
- Fixes an issue where Android Studio doesn't properly recognize dependencies in composite builds.
- Fixes an issue where you get a project sync error when loading the Android plugin multiple times in a single build–for example, when multiple subprojects each include the Android plugin in their buildscript classpath.
3.0.0 (October 2017)
Android Gradle plugin 3.0.0 includes a variety of changes that aim to address performance issues of large projects.
For example, on a sample skeleton project with ~130 modules and a large number of external dependencies (but no code or resources), you can experience performance improvements similar to the following:
|Android plugin version + Gradle version
|Android plugin 2.2.0 + Gradle 2.14.1
|Android plugin 2.3.0 + Gradle 3.3
|Android plugin 3.0.0 + Gradle 4.1
|Configuration (e.g. running
./gradlew --help)
|~2 mins
|~9 s
|~2.5 s
|1-line Java change (implementation change)
|~2 mins 15 s
|~29 s
|~6.4 s
Some of these changes break existing builds. So, you should consider the effort of migrating your project before using the new plugin.
If you don't experience the performance improvements described above, please file a bug and include a trace of your build using the Gradle Profiler.
This version of the Android plugin requires the following:
- Gradle 4.1 or higher. To learn more, read the section about updating Gradle.
- Build Tools 26.0.2 or higher.
With this update, you no longer need to specify a version for the build
tools—the plugin uses the minimum required version by default.
So, you can now remove the
3.0.1 (November 2017)
This is a minor update to support Android Studio 3.0.1, and includes general bug fixes and performance improvements.
- Better parallelism for multi-module projects through a fine grained task graph.
- When making changes to dependency, Gradle performs faster builds by not
re-compiling modules that do not have access to that dependency's API.
You should restrict which dependencies leak their APIs to other modules by
using Gradle's new dependency configurations:
compileOnly, and
- Faster incremental build speed due to per-class dexing. Each class is now
compiled into separate DEX files, and only the classes that are
modified are re-dexed. You should also expect improved build speeds for
apps that set
minSdkVersionto 20 or lower, and use legacy multi-dex.
- Improved build speeds by optimizing certain tasks to use chached outputs. To benefit from this optimization, you need to first enable the Gradle build cache.
- Improved incremental resource processing using AAPT2, which is now enabled by
If you are experiencing issues while using AAPT2, please
report a bug. You can also disable AAPT2 by
android.enableAapt2=falsein your
gradle.propertiesfile and restarting the Gradle daemon by running
./gradlew --stopfrom the command line.
New features
- Variant-aware dependency management. When building a certain variant of a module, the plugin now automatically matches variants of local library module dependencies to the variant of the module you are building.
- Includes a new Feature module plugin to support Android Instant Apps and the Android Instant Apps SDK (which you can download using the SDK manager). To learn more about creating Feature modules with the new plugin, read Structure of an instant app with multiple features.
- Built-in support for using certain Java 8 language features and Java 8 libraries. Jack is now deprecated and no longer required, and you should first disable Jack to use the improved Java 8 support built into the default toolchain. For more information, read Use Java 8 language features.
- Added support for running tests with
Android Test Orchestrator,
which allows you to run each of your app's tests within
its own invocation of
Instrumentation. Because each test runs in its own
Instrumentationinstance, any shared state between tests doesn't accumulate on your device's CPU or memory. And, even if one test crashes, it takes down only its own instance of
Instrumentation, so your other tests still run.
- Added
testOptions.executionto determine whether to use on-device test orchestration. If you want to use Android Test Orchestrator, you need to specify
ANDROID_TEST_ORCHESTRATOR, as shown below. By default, this property is set to
HOST, which disables on-device orchestration and is the standard method of running tests.
- Added
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
- New
androidTestUtildependency configuration allows you to install another test helper APK before running your instrumentation tests, such as Android Test Orchestrator:
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
- Added
testOptions.unitTests.includeAndroidResourcesto support unit tests that require Android resources, such as Roboelectric. When you set this property to
true, the plugin performs resource, asset, and manifest merging before running your unit tests. Your tests can then inspect
com/android/tools/test_config.propertieson the classpath for the following keys:
android_merged_assets: the absolute path to the merged assets directory.
Note: For library modules, the merged assets do not contain the assets of dependencies (see issue #65550419).
android_merged_manifest: the absolute path to the merged manifest file.
android_merged_resources: the absolute path to the merged resources directory, which contains all the resources from the module and all its dependencies.
android_custom_package: the package name of the final R class. If you dynamically modify the application ID, this package name may not match the
packageattribute in the app's manifest.
- Support for fonts as resources (which is a new feature introduced in Android 8.0 (API level 26)).
- Support for language-specific APKs with Android Instant Apps SDK 1.1 and higher. For more information, see Configure your build for pure splits.
- You can now change the output directory for your external native build project, as shown below:
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
- You can now use CMake 3.7 or higher when building native projects from Android Studio.
- New
lintChecksdependency configuration allows you to build a JAR that defines custom lint rules, and package it into your AAR and APK projects. Your custom lint rules must belong to a separate project that outputs a single JAR and includes only
compileOnlydependencies. Other app and library modules can then depend on your lint project using the
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Behavior changes
- Android plugin 3.0.0 removes certain APIs, and your build will break if you
use them. For example, you can no longer use the Variants API to access
outputFile()objects or use
processManifest.manifestOutputFile()to get the manifest file for each variant. To learn more, read API changes.
- You no longer need to specify a version for the build tools (so, you can now
remove the
android.buildToolsVersionproperty). By default, the plugin automatically uses the minimum required build tools version for the version of Android plugin you're using.
- You now enable/disable PNG crunching in the
buildTypesblock, as shown below. PNG crunching is enabled by default for all builds except debug builds because it increases build times for projects that include many PNG files. So, to improve build times for other build types, you should either disable PNG crunching or convert your images to WebP.
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
- The Android plugin now automatically builds executable targets that you configure in your external CMake projects.
- You must now add annotation processors
to the processor classpath using the
annotationProcessordependency configuration.
- Using the deprecated
ndkCompileis now more restricted. You should instead migrate to using either CMake or ndk-build to compile native code that you want to package into your APK. To learn more, read Migrate from ndkcompile.
2.3.0 (February 2017)
2.3.3 (June 2017)
This is a minor update that adds compatibility with Android Studio 2.3.3.
2.3.2 (May 2017)
This is a minor update that adds compatibility with Android Studio 2.3.2.
2.3.1 (April 2017)
This is a minor update to Android plugin 2.3.0 that fixes an issue where some physical Android devices did not work properly with Instant Run (see Issue #235879).
- Dependencies:
- Gradle 3.3 or higher.
- Build Tools 25.0.0 or higher.
- New:
- Uses Gradle 3.3, which includes performance improvements and new features. For more details, see the Gradle release notes.
Build cache: stores certain outputs that the Android plugin generates
when building your project (such as unpackaged AARs and pre-dexed remote
dependencies). Your clean builds are much faster while using the cache because
the build system can simply reuse those cached files during subsequent builds,
instead of recreating them. Projects using Android plugin 2.3.0 and higher use
the build cache by default. To learn more, read Improve Build Speed with Build Cache.
Includes a
cleanBuildCachetask that clears the build cache.
- If you are using the experimental version of build cache (included in earlier versions of the plugin), you should update your plugin to the latest version.
- Includes a
- Changes:
- Supports changes to Instant Run included in Android Studio 2.3.
- Configuration times for very large projects should be significantly faster.
- Fixed issues with auto-downloading for the constraint layout library.
- Plugin now uses ProGuard version 5.3.2.
- Includes many fixes for reported bugs. Please continue to file bug reports when you encounter issues.
2.2.0 (September 2016)
- Dependencies:
- Gradle 2.14.1 or higher.
- Build Tools 23.0.2 or higher.
- New:
- Uses Gradle 2.14.1, which includes performance improvements and new features, and fixes a security vulnerability that allows local privilege escalation when using the Gradle daemon. For more details, see the Gradle release notes.
- Using the
externalNativeBuild {}DSL, Gradle now lets you link to your native sources and compile native libraries using CMake or ndk-build. After building your native libraries, Gradle packages them into your APK. To learn more about using CMake and ndk-build with Gradle, read Add C and C++ Code to Your Project.
- When you run a build from the command line, Gradle now attempts to auto-download any missing SDK components or updates that your project depends on. To learn more, read Auto-download missing packages with Gradle.
- A new experimental caching feature lets Gradle speed up build times by pre-dexing, storing, and reusing the pre-dexed versions of your libraries. To learn more about using this experimental feature, read the Build Cache guide.
- Improves build performance by adopting a new default packaging
pipeline which handles zipping, signing, and zipaligning in one task. You
can revert to using the older packaging tools by adding
android.useOldPackaging=trueto your
gradle.propertiesfile. While using the new packaging tool, the
zipalignDebugtask is not available. However, you can create one yourself by calling the
createZipAlignTask(String taskName, File inputFile, File outputFile)method.
- APK signing now uses APK Signature Scheme
v2 in addition to traditional JAR signing. All Android platforms accept the
resulting APKs. Any modification to these APKs after signing invalidates their
v2 signatures and prevents installation on a device. To disable this feature,
add the following to your module-level
android { ... signingConfigs { config { ... v2SigningEnabled false } } }
- For multidex builds, you can now use ProGuard rules to determine which
classes Gradle should compile into your app's main DEX file. Because
the Android system loads the main DEX file first when starting your app, you
can prioritize certain classes at startup by compiling them into the main DEX
file. After you create a ProGuard configuration file specifically for your
main DEX file, pass the configuration file's path to Gradle using
buildTypes.multiDexKeepProguard. Using this DSL is different from using
buildTypes.proguardFiles, which provides general ProGuard rules for your app and does not specify classes for the main DEX file.
- Adds support for the
android:extractNativeLibsflag, which can reduce the size of your app when you install it on a device. When you set this flag to
falsein the
<application>element of your app manifest, Gradle packages uncompressed and aligned versions of your native libraries with your APK. This prevents
PackageManagerfrom copying out your native libraries from the APK to the device's file system during installation and has the added benefit of making delta updates of your app smaller.
- You can now specify
applicationIdSuffixfor product flavors. (Issue 59614)
- Changes:
getDefaultProguardFilenow returns the default ProGuard files that Android plugin for Gradle provides and no longer uses the ones in the Android SDK.
- Improved Jack compiler performance and features:
- Jack now supports Jacoco test coverage when setting
- Improved support for annotation processors. Annotation
processors on your classpath, such as any
compiledependencies, are automatically applied to your build. You can also specify an annotation processor in your build and pass arguments by using the
javaCompileOptions.annotationProcessorOptions {}DSL in your module-level
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className 'com.example.MyProcessor' // Arguments are optional. arguments = [ foo : 'bar' ] } } } }
If you want to apply an annotation processor at compile time but not include it in your APK, use the
annotationProcessordependency scope:
dependencies { compile 'com.google.dagger:dagger:2.0' annotationProcessor 'com.google.dagger:dagger-compiler:2.0' // or use buildVariantAnnotationProcessor to target a specific build variant }
- You can set additional flags for Jack using
jackOptions.additionalParameters(). The following code snippet sets the
jack.incrementalparameter to
android { defaultConfig { ... jackOptions { enabled true additionalParameters("jack.incremental" : true) } } }
For a list of parameters you can set, run the following from the command line:
java -jar /build-tools/jack.jar --help-properties
- By default, if the Gradle daemon's heap size is at least 1.5
GB, Jack now runs in the same process as Gradle. To adjust the
daemon heap size, add the following to your
# This sets the daemon heap size to 1.5GB. org.gradle.jvmargs=-Xmx1536M
- Jack now supports Jacoco test coverage when setting
2.1.0 (April 2016)
2.1.3 (August 2016)
This update requires Gradle 2.14.1 and higher. Gradle 2.14.1 includes performance improvements, new features, and an important security fix. For more details, see the Gradle release notes.
- Dependencies:
- Gradle 2.10 or higher.
- Build Tools 23.0.2 or higher.
- New:
- Added support for the N Developer Preview, JDK 8, and Java 8 language features using the Jack
toolchain. To find out more, read the N Preview guide.
Note: Instant Run does not currently work with Jack and will be disabled while using the new toolchain. You only need to use Jack if you are developing for the N Preview and want to use the supported Java 8 language features.
- Added default support for incremental Java compilation to reduce
compilation time during development. It does this by only recompiling
portions of the source that have changed or need to be recompiled. To disable
this feature, add the following code to your module-level
android { ... compileOptions { incremental false } }
Added support for dexing-in-process which performs dexing within the build process rather than in a separate, external VM processes. This not only makes incremental builds faster, but also speeds up full builds. The feature is enabled by default for projects that have set the Gradle daemon's maximum heap size to at least 2048 MB. You can do this by including the following in your project's
org.gradle.jvmargs = -Xmx2048m
If you have defined a value for
javaMaxHeapSizein your module-level
build.gradlefile, you need to set
org.gradle.jvmargsto the value of
javaMaxHeapSize+ 1024 MB. For example, if you have set
javaMaxHeapSizeto "2048m", you need to add the following to your project's
org.gradle.jvmargs = -Xmx3072m
To disable dexing-in-process, add the following code to your module-level
android { ... dexOptions { dexInProcess false } }
- Added support for the N Developer Preview, JDK 8, and Java 8 language features using the Jack toolchain. To find out more, read the N Preview guide.
2.0.0 (April 2016)
- Dependencies:
- Gradle 2.10 or higher.
- Build Tools 21.1.1 or higher.
- New:
- Enables Instant Run by supporting bytecode injection, and pushing code and resource updates to a running app on the emulator or a physical device.
- Added support for incremental builds, even when the app isn't running. Full build times are improved by pushing incremental changes through the Android Debug Bridge to the connected device.
- Added
maxProcessCountto control how many slave dex processes can be spawned concurrently. The following code, in the module-level
build.gradlefile, sets the maximum number of concurrent processes to 4:
android { ... dexOptions { maxProcessCount = 4 // this is the default value } }
- Added an experimental code shrinker to support pre-dexing and reduce re-dexing
of dependencies, which are not supported with Proguard. This improves the build
speed of your debug build variant. Because the experimental shrinker does not
support optimization and obfuscation, you should enable Proguard for your
release builds. To enable the experimental shrinker for your debug builds, add
the following to your module-level
android { ... buildTypes { debug { minifyEnabled true useProguard false } release { minifyEnabled true useProguard true // this is a default setting } } }
- Added logging support and improved performance for the resource shrinker.
The resource shrinker now logs all of its operations into a
resources.txtfile located in the same folder as the Proguard log files.
- Changed behavior:
- When
minSdkVersionis set to 18 or higher, APK signing uses SHA256.
- DSA and ECDSA keys can now sign APK packages.
Note: The Android keystore provider no longer supports DSA keys on Android 6.0 (API level 23) and higher.
- When
- Fixed issues:
- Fixed an issue that caused duplicate AAR dependencies in both the test and main build configurations.
Older releases
Android plugin for Gradle, revision 1.5.0 (November 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Integrated the Data Binding plugin into the Android plugin for Gradle. To enable it, add
the following code to each per-project
build.gradlefile that uses the plugin:
android { dataBinding { enabled = true } }
- Added a new Transform API to allow third-party plugins to manipulate compiled
.classfiles before they're converted to
.dexfiles. The Transform API simplifies injecting custom class manipulations while offering more flexibility regarding what you can manipulate. To insert a transform into a build, create a new class implementing one of the
Transforminterfaces, and register it with
android.registerTransform(theTransform, dependencies). There's no need to wire tasks together. Note the following about the Transform API:
- A transform can apply to one or more of the following: the current project, subprojects, and external libraries.
- A transform must be registered globally, which applies them to all variants.
- Internal code processing, through the Java Code Coverage Library (JaCoCo), ProGuard,
and MultiDex, now uses the Transform API. However, the Java Android Compiler Kit
(Jack) doesn't use this API: only the
javac/dxcode path does.
- Gradle executes the transforms in this order: JaCoCo, third-party plugins, ProGuard. The execution order for third-party plugins matches the order in which the transforms are added by the third party plugins; third-party plugin developers can't control the execution order of the transforms through an API.
- Deprecated the
dexgetter from the
ApplicationVariantclass. You can't access the
Dextask through the variant API anymore because it's now accomplished through a transform. There's currently no replacement for controlling the dex process.
- Fixed incremental support for assets.
- Improved MultiDex support by making it available for test projects, and tests now automatically have the
- Added the ability to properly fail a Gradle build and report the underlying error cause when the Gradle build invokes asynchronous tasks and there's a failure in the worker process.
- Added support for configuring a specific Application Binary Interface (ABI) in variants that contain multiple ABIs.
- Added support for a comma-separated list of device serial numbers for the
ANDROID_SERIALenvironment variable when installing or running tests.
- Fixed an installation failure on devices running Android 5.0 (API level 20) and higher when the APK name contains a space.
- Fixed various issues related to the Android Asset Packaging Tool (AAPT) error output.
- Added JaCoCo incremental instrumentation support for faster incremental builds. The Android plugin for Gradle now invokes the JaCoCo instrumenter directly. To force a newer version of the JaCoCo instrumenter, you need to add it as a build script dependency.
- Fixed JaCoCo support so it ignores files that aren't classes.
- Added vector drawable support for generating PNGs at build time for backward-compatibility. Android plugin for Gradle generates PNGs for every vector drawable found in a resource directory that doesn't specify an API version or specifies an
android:minSdkVersionattribute of 20 or lower in the
<uses-sdk>element in the app manifest. You can set PNG densities by using the
generatedDensitiesproperty in the
productFlavorsections of a
- Added sharing of the mockable
android.jar, which the plugin generates only once and uses for unit testing. Multiple modules, such as
lib, now share it. Delete
$rootDir/buildto regenerate it.
- Changed the processing of Java resources to occur before the obfuscation tasks instead of during the packaging of the APK. This change allows the obfuscation tasks to have a chance to adapt the Java resources following packages obfuscation.
- Fixed an issue with using Java Native Interface (JNI) code in the experimental library plugin.
- Added the ability to set the platform version separately from the
android:compileSdkVersionattribute in the experimental library plugin.
- Integrated the Data Binding plugin into the Android plugin for Gradle. To enable it, add the following code to each per-project
Android plugin for Gradle, revision 1.3.1 (August 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Fixed the ZipAlign task to properly consume the output of the previous task when using a customized filename.
- Fixed Renderscript packaging with the NDK.
- Maintained support for the
createDebugCoverageReportbuild task.
- Fixed support for customized use of the
archiveBaseNameproperty in the
build.gradlebuild> file.
- Fixed the
Invalid ResourceTypelint warning caused by parameter method annotation lookup when running lint outside of Android Studio.
Android plugin for Gradle, revision 1.3.0 (July 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Added support for the
com.android.build.threadPoolSizeproperty to control the
Androidtask thread pool size from the
gradle.propertiesfile or the command line. The following example sets this property to 4.
- Set the default build behavior to exclude
LICENSE.txtfiles from APKs. To include these files in an APK, remove these files from the
packagingOptions.excludesproperty in the
build.gradlefile. For example:
android { packagingOptions.excludes = [] }
- Added the
sourceSetstask to inspect the set of all available source sets.
- Enhanced unit test support to recognize multi-flavor and
build variant source folders. For example, to test an app with multi-flavors
flavorAwith the
Debugbuild type, the test source sets are:
- test
- testFlavor1
- testFlavorA
- testFlavor1FlavorA
- testFlavor1FlavorADebug
Android tests already recognized multi-flavor source folders.
- Improved unit test support to:
- Run
javacon main and test sources, even if the
useJackproperty is set to
truein your build file.
- Correctly recognize dependencies for each build type.
- Run
- Added support for specifying instrumentation test-runner arguments from the command line.
For example:
./gradlew connectedCheck \ -Pandroid.testInstrumentationRunnerArguments.size=medium \ -Pandroid.testInstrumentationRunnerArguments.class=TestA,TestB
- Added support for arbitrary additional Android Asset Packaging Tool (AAPT) parameters
in the
build.gradlefile. For example:
android { aaptOptions { additionalParameters "--custom_option", "value" } }
- Added support for a
test APK module as a separate test module, using the
targetVariantproperties to set the APK path and target variant.
Note: A test APK module does not support product flavors and can only target a single variant. Also, Jacoco is not supported yet.
- Added resource name validation before merging resources.
- When building an AAR (Android ARchive) package for library modules, do not provide an
@{applicationId}placeholder in the manifest merger settings. Instead, use a different placeholder, such as
@{libApplicationId}and provide a value for it if you want to include application Ids in the archive library.
- Added support for the
Android plugin for Gradle, revision 1.2.0 (April 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Enhanced support for running unit tests with Gradle.
- Added support to include Java-style resources in the classpath when running unit tests directly from Gradle.
- Added unit test dependency support for Android ARchive (AAR) artifacts.
- Added support for the
unitTestVariantsproperty so unit test variants can be manipulated using the
- Added the
unitTest.allcode block under
testOptionsto configure customized tasks for unit test. The following sample code shows how to add unit test configuration settings using this new option:
android { testOptions { unitTest.all { jvmArgs '-XX:MaxPermSize=256m' // Or any other gradle option. } } }
- Fixed the handling of enums and public instance fields in the packaging of the
- Fixed library project task dependencies so test classes recompile after changes.
- Added the
testProguardFileproperty to apply ProGuard files when minifying a test APK.
- Added the
timeOutproperty to the
adbOptionscode block for setting the maximum recording time for Android Debug Bridge screen recording.
- Added support for 280 dpi resources.
- Improved performance during project evaluation.
Android plugin for Gradle, revision 1.1.3 (March 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Fixed issue with duplicated dependencies on a test app that triggered a ProGuard failure.
- Fixed Comparator implementation which did not comply with the JDK Comparator contract and generated a JDK 7 error.
Android plugin for Gradle, revision 1.1.2 (February 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Normalized path when creating a mockable JAR for unit testing.
- Fixed the
archivesBaseNamesetting in the
- Fixed the unresolved placeholder failure in manifest merger when building a library test application.
Android plugin for Gradle, revision 1.1.1 (February 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Modified build variants so only variants that package a Wear app trigger Wear-specific build tasks.
- Changed dependency related issues to fail at build time rather than at debug time. This behavior allows you to run diagnostic diagnostic tasks (such as 'dependencies') to help resolve the conflict.
- Fixed the
android.getBootClasspath()method to return a value.
Android plugin for Gradle, revision 1.1.0 (February 2015)
- Dependencies:
- Gradle 2.2.1 or higher.
- Build Tools 21.1.1 or higher.
- General Notes:
- Added new unit test support
- Enabled
unit tests to
run on the local JVM against a special version of the
android.jarfile that is compatible with popular mocking frameworks, for example Mockito.
- Added new test tasks
testRelease, and
testMyFlavorDebugwhen using product flavors.
- Added new source folders recognized as unit tests:
- Added new configurations in the
build.gradlefile for declaring test-only dependencies, for example,
testCompile 'junit:junit:4.11',
testMyFlavorCompile 'some:library:1.0'.
Note: Test-only dependencies are not currently compatible with Jack (Java Android Compiler Kit).
- Added the
android.testOptions.unitTests.returnDefaultValuesoption to control the behaviour of the mockable android.jar.
- Replaced
Testin test task names with
AndroidTest. For example, the
assembleDebugTesttask is now
assembleDebugAndroidTesttask. Unit test tasks still have
UnitTestin the task name, for example
- Modified ProGuard configuration files to no longer apply to the test APK. If minification is enabled, ProGuard processes the test APK and applies only the mapping file that is generated when minifying the main APK.
- Updated dependency management
- Fixed issues using
Note: These scopes are incompatible with AAR (Android ARchive) packages and will cause a build with AAR packages to fail.
- Modified dependency resolution to compare the dependencies of an app under test and the test app. If an artifact with the same version is found for both apps, it's not included with the test app and is packaged only with the app under test. If an artifact with a different version is found for both apps, the build fails.
- Added support for
anyDpiresource qualifier in resource merger.
- Improved evaluation and IDE sync speeds for projects with a large number of Android modules.
Android plugin for Gradle, revision 1.0.1 (January 2015)
- Dependencies:
- Gradle 2.2.1 up to 2.3.x.
Note: This version of the Android plugin for Gradle is not compatible with Gradle 2.4 and higher.
- Build Tools 21.1.1 or higher.
- Gradle 2.2.1 up to 2.3.x.
- General Notes:
- Fixed issue with Gradle build failure when accessing the
extractReleaseAnnotationsmodule. (Issue 81638).
- Fixed issue with
Disablepassing the
--no-optimizesetting to the Dalvik Executable (dex) bytecode. (Issue 82662).
- Fixed manifest merger issues when importing libraries with a
targetSdkVersionless than 16.
- Fixed density ordering issue when using Android Studio with JDK 8.
- Fixed issue with Gradle build failure when accessing the
Android plugin for Gradle, revision 1.0.0 (December 2014)
- Dependencies:
- Gradle 2.2.1 up to 2.3.x.
Note: This version of the Android plugin for Gradle is not compatible with Gradle 2.4 and higher.
- Build Tools 21.1.1 or higher.
- Gradle 2.2.1 up to 2.3.x.
- General Notes:
- Initial plugin release.

subset: commoncrawl


text:
Serve all your delicious smoothies, juices, ice coffee, soft drinks, and frozen concoctions in this selection of distinctive disposable drink cups from Restaurantware. Eco-friendly and durable, our plastic drink cups are a great disposable alternative for your next event. Moreover, our plastic lids are sturdy, firm, and fit securely onto most of our drinking cups.
Our disposable drinking cups and lids are built to keep drinks cold, making sure your customers are taken care of. Best of all, our cups are made from PLA compostable plastics, so they'll take care of the environment as well. Choose from 9, 12, 16 and 20-ounce sizes, or from our Flexi Grip collection, for a more robust serving cup.
We also offer two types of plastic drink cup lids. Our traditional flat lid will keep beverages from leaking, while our dome lids are perfect for keeping slushies, milkshakes, and other frozen beverages from spilling over. Both lids are designed to stay secure and tight on a variety of PLA Compostable Cold Drinking Cups.
You and your guests are sure to be pleased by the quality, durability and classy look of these disposable drink cups.
2 Items
Basic Nature Round Clear PLA Plastic Dome Lid - Fits 20 oz Drinking Cups, Compostable - 1000 count box>SKU: RWP0167C$75.99View as Grid List
2 Itemsper page


text:
The Academy Awards aren't until February, but as far as Roger Ebert is concerned, we already know who's going to take home the big prize. "The winner of the Academy Award for Best Picture will be Ben Affleck's tense new thriller Argo," he wrote on September 10, not because he thinks it's the best movie of the year (although he does think it's "just plain a terrific film"), but because it received such a strong reception at the Toronto Film Festival, which has been the launching pad for other Oscar winners like Slumdog Millionaire and The King's Speech.
Argo looks like a part of the Oscar conversation for the rest of the year. Forgetting for a moment that it's a good film, this thriller (about a U.S. effort to rescue six American hostages during the 1979 Iranian revolution by pretending they were part of a science-fiction film being scouted in Tehran) just feels like an Oscar movie. It's based on a true story. It's got an impressive cast, including Bryan Cranston, John Goodman, and Alan Arkin. It's an intelligent crowd-pleaser aimed at grownups rather than the kids who flock to The Avengers or The Amazing Spider-Man. Even if it weren't much of a movie, Argo would still have all the core components necessary to contend for an Oscar.
What's amazing about all this is who directed Argo. It's Ben Affleck, the guy whose career you had probably written off about eight years ago. It's OK—I kinda did, too. Now look at him: In the last few years, he's had one of the most successful (and, honestly, gratifying) comebacks in recent film history. The man reinvented himself, and it worked. How'd we get here, again?
When first you met Affleck, it was as an actor, probably in a smaller part in something like Dazed and Confused or Mallrats. His first really promising role was as the lovestruck comic-book artist in 1997's Chasing Amy, which was also the movie that made people think writer-director Kevin Smith might have genuine potential as a filmmaker. (We were a far more optimistic people in the late '90s.) Affleck proved himself to be a compelling romantic figure in Chasing Amy, and that year got even better for him a few months later when Good Will Hunting opened and won two Oscars, including Best Original Screenplay for him and his good buddy Matt Damon. Whether you liked the movie or not, it just seemed unbelievable that these two kids were now Oscar winners, something that even they seemed painfully aware of when they gave their oh-gosh-golly-gee acceptance speech...
Winning an Oscar is great, but afterward it was easy to assume that that moment was going to be the highlight of these guys' career. After all, went the conventional thinking, how could they have written something as sensitive and mature as Good Will Hunting? (That was the core joke of Matt & Ben, Mindy Kaling and Brenda Withers' satiric 2003 play, which argued that those two bozos didn't write the script—it just fell out of the sky and into their lucky hands.)
After his Oscar win, Affleck focused on star vehicles like Armageddon and Forces of Nature, which aren't the sorts of movies that will convince your critics that you're an artist of great depth. Tellingly, when he appeared in Shakespeare in Love, his supporting performance was overshadowed by the fact that he was dating Gwyneth Paltrow. He was becoming a celebrity tabloid figure—the hunk who had somehow won an Oscar.
But even then, Affleck was working hard to prove he was more than that media caricature of him. In 2000, he was in the romantic drama Bounce (with Paltrow), and two years later he clashed with Samuel L. Jackson in the underrated Changing Lanes. Clearly, he was serious about flexing his dramatic side, and he had the chops for it. (Not that it always worked: His "Always Be Closing"-like monologue in Boiler Room strove way too hard to ape Alec Baldwin.) But those riskier roles were lower-profile affairs. At the same time, he was doing Pearl Harbor, The Sum of All Fears and Daredevil, movies that a lot more people saw and probably didn't like.
Around that same time, he took on his worst role, the one that threatened to ruin his career: He dated Jennifer Lopez. It wasn't Lopez herself that was the problem. It was the two of them together. Rightly or not, they quickly became everything that's odious about celebrity couples: self-obsessed pretty people running around flaunting their wealth and fame, and contributing nothing to society. Sure, Gigli was a disaster, but it's hard to argue that his appearance in Lopez's "Jenny From the Block" video wasn't even more of a train wreck for him. It's not just that he agreed to be in the video: It's that he comes across as a boring Ken doll. (And, of course, there's the suntan lotion moment, which will probably haunt him for the rest of his life.)
Meanwhile, his old pal Damon was starring in Ocean's movies and becoming a franchise with the Bourne trilogy. While Affleck was drowning, Damon had proved he had grown up from being that goofy kid on stage at the Oscars.
That very easily could have been the end of the story for Affleck. (It's funny to think that Ryan Reynolds is sort of in the exact same spot now that Affleck was then: a handsome guy that people have a hard time taking seriously.) But Affleck started turning things around by appearing in a low-budget indie that just about nobody saw. Yet it's one of the best things he's ever done.
In 2006, he played George Reeves (the actor in the 1950s Superman TV show) in Hollywoodland, a drama about a private detective (Adrien Brody) investigating whether or not Reeves' death really was a suicide. The movie's only so-so, but Affleck was a revelation in it, turning Reeves into a mournful, tragic figure. The way the film tells it, Reeves was a journeyman actor who peaked early with a part in Gone With the Wind but who ultimately regretted that the only thing anybody was ever going to remember him for was playing a guy in a cape. It's easy to see why Affleck might have been drawn to the part: Reeves' career sort of paralleled his own. Maybe Affleck feared that he'd be forever known as the pretty boy who rubbed lotion on J-Lo's butt. But you didn't have to be a cut-rate psychoanalyst to appreciate the empathy Affleck brought to the role. He was reintroducing himself to us.
That reintroduction continued the following year when he made his directing debut with Gone Baby Gone. He stayed behind the camera and produced a solid crime drama that most critics liked, simply because they didn't think he had it in him. He got great performances from his brother Casey Affleck and Amy Ryan, earning her an Oscar nomination in the process. That bid for respect continued in 2010's The Town, which he directed and also starred in. The movie showed he could handle action, and again he put together a stellar cast and guided them to great work. (Jeremy Renner grabbed an Oscar nod.) Suddenly, critics didn't need to feel apologetic for liking one of Affleck's movies: He had established himself as a solid director. Probably just as importantly, he wasn't in bad blockbusters anymore—let's all agree to forget that he was in He's Just Not That Into You—and instead did solid supporting work in dramas like State of Play and The Company Men. (And he's really funny as a moron in Mike Judge's Extract.)
And now we come to Argo. I don't think it's an amazing movie, but it's damn entertaining. Affleck's good at that. He makes smart movies that work at the multiplexes without insulting audiences' intelligence. (He's doing what Ron Howard does at his best: popcorn movies with a bit of class to them.) That doesn't mean he's an auteur or a Best Director Oscar winner, but god knows we need more Afflecks in Hollywood. And, seriously, who would have thought we'd even be having a conversation like this back when he was just half of Bennifer?
Grierson & Leitch is a regular column about the movies. Follow us on Twitter, @griersonleitch.


text:
Cottonwood Heights, UTHome Menu
In 2006, Cottonwood Heights adopted the first certified property tax rate offered to the city by the State Tax Commission as a transition from the unincorporated Salt Lake County rate. Since this original adoption, the city has not proposed nor adopted an increase to the certified property tax rate. The City also levies a 1.0 percent local option sales tax.
Property Taxes:
Real property valuations and tax rates in Utah are managed by the Salt Lake County Assessor's office and the Utah Tax Commission-property tax division. Property tax collections are processed by the Salt Lake County Treasurer's office, and appeals are managed by the Salt Lake County Board of Equalization, which in turn is managed by the Salt Lake County Auditor's office.
Certified Tax Rates are calculated each year by the Utah State Tax Commission – Property Tax Division. The certified rate is the calculated property tax rate required to generate an equivalent amount of property taxes compared to the prior year's collections.
Sales & Use Taxes:
Sales taxes are collected and remitted by businesses to the Utah State Tax Commission. Local option sales tax is levied by each local jurisdiction, usually limited to 1.0 of the usual 6.85 percent sales tax. Of the local option tax collected in each jurisdiction, 50 percent is distributed to the jurisdiction. The remaining 50 percent is collected into a statewide pool and then allocated to each local jurisdiction based on each city's population as a percentage of statewide population. Usually, larger cities with large retail centers contribute more to the pool than they receive and in turn smaller cities receive more from population distributions than what they contribute to the pool. (Sales Tax 6.85%: 4.7% State, 1.0% Local Option, .30% Mass Transit, .25% County Option Transportation, .25% Sales Tax, .10% County Option, .25% County Zoo & Arts)
Energy Use Tax:
The 2015 Fiscal Year budget included a new energy use tax, which is a 6% tax on electrical and natural gas bills, effective October 1, 2015. Previous to this budget year, Cottonwood Heights was the only city in the state with a population above 15,000 that did not charge this tax. This tax has advantages over increasing other taxes where there are exemptions from taxation, in that the Energy Use tax is assessed on all businesses, schools, governments and churches who might otherwise be exempt from taxation
Class C Road Funds (Gas Tax):
The Class B & C road system with a funding program was established by the Utah Legislature in 1973 as a means of providing assistance to counties and incorporated municipalities for the improvement of roads and streets throughout the state.
The funds differ from ordinary local revenues inasmuch as they are subject to administrative direction by the State in accordance with legislative provision. The Utah Department of Transportation is the administrative authority on behalf of the State.
Consolidated Fee Schedule
The City Council sets the various fees for services provided by the City.


text:
Does anyone know how I can link to a location in Bing Maps and have it open in 3D mode?
A link formatted like this:
will open that location using their standard 2D map. Is there anything I can add in to have it open in 3D instead?
Thanks, Seth


text:
tab article
Pets like to explore the outdoors just like people. So as a pet owner you want a strong dependable cable to assure your pet"s safety while outside. Our giant cable line features galvanized steel aircraft cable and heavy duty nickel plated bull snaps. These tie outs are designed to safely secure extra large dogs.


text:
We use cookies to make interactions with our websites and services easy and meaningful, to better understand how they are used and to tailor advertising. You can read more and make your cookie choices here. By continuing to use this site you are giving us your consent to do this.
Increase customer satisfaction using the #1 platform for service.


text:
A day in the life of a fly is roughly equivalent to a year for a human, so researchers like Wessells use them to study the long-term effects of exercise on the body without having to follow human subjects for decades or worry about outside influences contaminating their results.
The experiments show, for example, that after "years" of regular exercise, elderly flies demonstrate the vigor of middle-aged flies, says Wessells, an assistant professor of internal medicine at the University of Michigan Medical School.
"The goal is not to extend their life spans, but to improve their ability to move around well and have a good quality of life as they age," he continues. "And it turns out that flies have some of the same trouble that humans do – getting started is the hardest part."
But before beginning the research, Wessells had to solve a real head-scratcher – how do you get a fly to exercise?
He says the credit for the solution goes to his former lab technician Nicole Piazza.
Piazza, who graduated from U-M last year with an M.P.H. and is on her way to becoming a dietician, dubbed her invention the Power Tower after a vertical thrill ride at Cedar Point amusement park.
The flies are housed in tiers of test tubes inside a wooden frame. Every 20 seconds, a motorized arm trips a lever and drops the frame a short distance causing the flies to be knocked to the bottom of the tube.
And as soon as they fall down, they scurry back up the wall. They do it again and again and again.
"The machine takes advantage of their natural instinct to climb up the vial," Piazza says.
The flies are genetically identical, which makes it easier to isolate the differences spurred by the exercise, Wessells notes.
The ultimate goal of the research, which recently received a $400,000 grant from the National Heart, Lung and Blood Institute, is to develop new treatments and therapies for people.
"In the future the research may allow us to design genetic or pharmacological mimics to provide the benefits of exercise – even to those who cannot exercise due to advanced age, illness or injury," Wessells says.
Media Contacts
- Ian Demsky: [email protected] 734-764-2220


text:
• A daily summary of global reports on security issues.
The US soldier accused of killing 16 villagers in Afghanistan's Kandahar Province was flown to Kuwait, prompting fresh outrage among Afghans who wanted to see him stand trial in the country. The move also potentially jeopardizes a US-Afghanistan agreement to keep advisers in the country after the troop withdrawal.
Unaware that the soldier had already been taken out of the country, hundreds of Afghans took to the streets in the nearby province of Zabul to demand his trial in Afghanistan, The Washington Post reports. Kandahar lawmaker Mohammed Nayem Hamidzai told the Post that news of the soldier's departure would likely spur "fresh outrage."
US military spokesman Lt. Col. Jimmie Cummings said the Afghan government knew of US plans to take the suspect out of the country and called it "routine standard operating procedure" when preparing to try someone in the military justice system, The Washington Post reports. No charges have yet been filed.
The soldier is accused of walking off his base in southern Afghanistan and into a village in the Panjwayi district of Kandahar on March 11, and shooting the victims in their homes. Afterward, he turned himself in, and was held by the US military in Afghanistan until he was flown out to Kuwait.
"This is really about being able to ensure that we can execute this investigation and the judicial proceedings fairly and properly," said Lt. Gen. Curtis Scaparrotti, the second most senior US commander in Afghanistan, according to Reuters.
[ Video is no longer available. ]
The Christian Science Monitor reported that US troops in Afghanistan fall under the Military Technical Agreement, "which ensures that any US service member accused of wrongdoing will be held accountable by US military law and proceedings." The question of who handles the court hearing and assigns the punishment has long been a controversial issue in Afghanistan, as it was in Iraq.
The Afghan government has previously agreed to go along with the Military Technical Agreement, but local pushback to the arrangement and demands that international coalition troops stand trial in Afghan courts are growing, the Monitor reports.
"I'm sure that the government will start talking to the foreigners about the prosecution of the foreign soldiers in Afghanistan after this incident. The Afghan government looks serious about it now," says Rohullah Qarizada, head of Afghanistan's Bar Association. "In the past, foreign soldiers committed crimes and the Afghan government could not prosecute them. Now I believe the Afghan government learned from the past and it will talk to the Americans about it."
Shekiba Hashimi, a member of parliament from Kandahar and part of the team investigating the incident, warned that removing the suspect from the country would only exacerbate local anger. "If he is not tried and punished in the country, people will rise up against the Americans," she told Reuters.
The Taliban have threatened to behead US personnel in the country in retaliation for the shooting, and insurgents have attacked Afghan officials who are investigating the incident. Earlier this week, Afghans called on President Hamid Karzai to reject an agreement that would allow US advisers to remain in Afghanistan after the withdrawal date of 2014, Reuters reports.
Negotiations were difficult even before the shooting and now many Afghan lawmakers are telling Mr. Karzai to refuse to sign the agreement unless the suspect is tried in the country, the Associated Press reports.
Abdul Khaliq Balakarzai, another Kandahar lawmaker, said President Hamid Karzai should respond to the U.S. decision to move the soldier by refusing to sign the strategic partnership agreement. "If the trial was in Afghanistan, the people would see that America doesn't like this soldier and wants to punish him," said Balakarzai. "But unfortunately America ignored our demand."
Despite this, the overall reaction to the shooting has been much more subdued than the reaction to last month's Quran burning by US troops. The Afghan government has worked to persuade Afghans not to protest, according to AP.


text:
Latest News
Systema REVOLUTION Gearbox breaks performance boundaries! (2008-02-15)
Update:Systema have announced that they plan to release their new revolutionary Systema Revolution Gear Box by Mid-December. They have also completed testing & perfecting of their new Super Max. More updates to follow
RedWolf Airsoft Specialist is thrilled to present one of the most exciting new products for the year 2008 from SYSTEMA. We received one of these working prototypes from Systema this month, and have been very impressed with the response and performance of this incredible new design. For those unfamiliar with this famous company, Systema is to Marui like what AMG is to Mercedes Benz. From the masterminds of AEG upgrade technology and the creators of the Professional Training Weapon; the Revolution gearbox from Systema makes a leap to improve the AEG operation by deriving PTW technology into a shell, that drops right in the place of your obsolete Version 2 gearbox. Featuring a revolutionary (pun intended) design free of sensitive parts like the tappet plate, cut-off lever and anti-reverse latch, this computer controlled piece of intelligent engineering is really racing to develop the breed. The gearbox of the Marui Man from 1991 is ready for a well deserved retirement! You can now turn your traditional Marui-design automatic electric gun into an economical version PTW!
|On a quick glance, the Revolution looks very much like a V2 gearbox.
Scheduled to be released in time for the summer season of 2008, the Systema Revolution gearbox is the future top-tier solution for upgrading an AR-15 type AEG that uses a Version 2 gearbox. The Revolution is a drop-in fit for the Tokyo Marui M4/M16 series, and will fit most other brands as well, provided that they are made to a high enough standard and measurements close to Tokyo Marui. As with the traditional full gearbox upgrades from Systema, we are not expecting any issues using this with G&P and Classic Army receivers. ICS will not be compatible, due to the split design and modified receiver dimensions.
|After removing the right half, the differences become obvious.
Compatibility with the V2 gearbox stops at the surface. The Systema Revolution gearbox mimics the V2 on the outside so it can be used with the common AEG, but an entirely different heart is beating on the inside. Note the extra beefy walls of this near gearbox, which is designed to withstand high powered springs for mind-blowing power levels unseen in traditional Marui-type guns.
An ingenious trigger unit called the E.C.U. is integrated into the Revolution. As the trend is with high performance electric guns, the design uses MOSFET components to allow a smooth flow of electrons from the battery to the motor, and eliminate arcing and high currents from the trigger unit. Instead of a mechanical cut-off lever, the E.C.U. has an optical sensor to detect the movement of the sector gear at all times.
First of all, the optical sensor allows the factory-programmed chip to make the gun shoot once on semi, and once only. Even a quick tap on the trigger activates the cycle, which doesn't leave the spring half-cocked like a traditional AEG does. This feature was exclusive for the PTW, but now it is available for AEG users as well.
Because the E.C.U. "knows" the position of the gears at all times, it will always stop the firing cycle in the same spot. Adding more current or active braking (by reversed polarity) when necessary, the E.C.U. keeps the shooting cycle consistent shot after shot. This allowed to omit another small mechanical part, namely the anti-reversal latch. Less moving parts translates to fewer mechanical problems!
The E.C.U. makes a proper three round burst possible as well, instead relying on complex mechanical parts or an inconsistent timer system as seen in older designs. As with real firearms, the burst stops as soon as the trigger is released, even if three rounds were not fired at that point. In fact, this circuitry can allow programming any number of rounds to be fired automatically on each trigger pull. So a 6 or 7 round burst is possible though it's not clear at this point whether Systema will make that user programmable.!
|The second piston tooth is lowered to ensure a positive mating of the sector gear and piston teeth. The piston features a full steel tooth rack in a solid polymer body.
The tappet plate is one achille's heel of a traditional AEG gearbox design. Why reinforce it when you don't even need one? Pioneered with the PTW, the Revolution gearbox has a new nozzle design; the loading movement is achieved with a flexible fit to the piston head. This makes the nozzle movement linear, and eliminates the old fragile part from the equation entirely. The nozzle is pulled back and released from an O-ring within the piston head as the piston moves. As a fine side-effect we expect the gearbox to be even more durable in the front, compared to the reinforced V2 gearbox.
The piston is considered to be the "consumable" part in any AEG. With the Revolution, this is addressed again with a PTW-style solution. By reducing the spring diameter, Systema achieved more freedom in the design of the piston. It is now an enclosed polymer part with an all steel tooth rack below, while other metal tooth piston designs have been open from the "belly" to allow sufficient space for the tooth rack. As a result the spring does not rub against metal, and the tooth rack stays on under the load of even the strongest springs. An in case you were wondering, this is not the traditional red cylinder offered by Systema in the past for regular gearbox upgrades. This is the same super strong piston (which also happens to be red color) used in the PTW MAX guns.
|A closer inspection.
As the gearbox was improved so far ahead compared to a traditional design already, Systema decided to make the gear train their way, instead of reinforced parts following the Tokyo Marui form. The gear train consists of four gears to transfer the power from the motor to the piston. The sector gear has a slightly larger module (tooth size) to engage the piston, and is fitted with 7 mm bearings for strength. Two spur gears and a bevel gear are machined to tight tolerances with a smaller module to reduce gear noise and improve efficiency. These three gears are supported by two 6 mm ball bearings each, and allow a wide range of gear ratios to be developed later on.
|As the piston starts to retreat, it pulls the nozzle back. The spring-loaded piston head provides a slight delay to the release.
Because of the additional gear in the gear train, the motor was redesigned to run in reverse. While a DC motor would turn the other way simply by reversing polarity, it will not give peak performance in the "wrong" direction. The motor of the Revolution gearbox features superbly strong Neodymium rare earth magnets, ball bearings, a steel pinion and hand-wound armament for the highest performance money can buy.
|After releasing the nozzle, the piston head travels back against the piston, and the nozzle is pushed forward to load the BB
Brought to you by RedWolf Airsoft, you can count on us for the latest information regarding the Systema Revolution. Please check our home page regularly for updates! Pricing for this revolutionary gearbox has not yet been set yet but check back for more information as it becomes available from Systema. RedWolf Airsoft is the official distributor for Systema in Asia, UK and parts of Europe.
|The gearbox has a surprisingly small amount of mechanical components. All parts are the highest quality you can hope to get.
For additional reading, you may want to check out our buddies at Zshot.com (Systema Distributor USA) who have a rather nifty page about the Systema Revolution gearbox here and have a FAQ page here.


text:
Little Brushes
Open Studio at Pinot's Palette
Wednesday, December 6
No sign up necessary
Learn more
Class Details
It's an Open Studio at Pinot's Palette today.
Just drop in to do one of our 30+ self-guided paintings, create your own masterpiece, or bring in a painting you did in one of our classes to touch it up or make some modifications! If you would like to create a masterpiece, please allow 1-2 hours to complete (arrive no later than 2pm to start painting).
No registration is necessary for Freestyle Studio. All Ages welcome. There will be no alcohol served. This is strictly self-guided. Artists will not be available to assist you. The Studio Manager will be available for check-in and to assist with set-up. Please bring any snacks you'd like. OUTSIDE BEVERAGES OF ANY KIND ARE STRICTLY PROHIBITED! Non-alcoholic beverages are available for purchase at the bar as well as complimentary bottled water.
$10 to paint a 6x6 canvas.
$12 to paint a 8x10 canvas.
$15 to paint a 10x10 canvas.
$20 to paint a 10x20 canvas.
$23 to paint a 12x12 canvas.
$25 to paint a 16x20 canvas.
The Best Day Ever
Fun Atmosphere
From the moment you walk in, the mood is light, the music is fun and the conversation comes easy!
Easy to Do
You don't need to be a seasoned painter — we make it easy for everyone to find their inner artist!
Sit Together
You'll get seats with all your friends, even if you book separately. Just tell us your friends' names when you register.
Paint Your Way
There's no rule that says you have to follow the artist's steps. It's your art, so paint it however you like!
Frequently Asked Questions
Check out our FAQs to learn more about what to expect from your Pinot's Palette experience or feel free to call the studio to speak to a member of our staff.
Do I need a reservation?
Yes, advanced reservations are required. All guests must be registered for class prior to arrival to guarantee your reservation and special seating requests. Payment is due at the time of the reservation to guarantee your seat.
Is alcohol included in the event price?
No, the Department of Alcohol Beverage Control mandates the separate sale of alcohol. The class price includes all of your art supplies, professional instruction, and the experience of our fun and entertaining atmosphere.
What is your food and beverage policy?
It is illegal to BYOB in the state of Kentucky, but you can BYOFood. We do not provide food. We are a bar, so all beverages must be purchased in our studio, including non-alcoholic. Outside beverages of any kind are strictly prohibited and you will be asked to finish them or throw them out at the door before entry. Due to our bar license, everyone must be 21 or older and present valid ID at the bar if you plan to consume alcoholic beverages. We do have catering options available as well.
When do I need to arrive for class?
Doors open 30 minutes before class starts. We recommend you arrive at least 15-20 minutes before class time to allow yourself to get settled in and mingle before the painting begins. Please allow yourself up to an additional 30 minutes after the painting session is scheduled to end, if planning a ride home or have made other plans after class. LATE ARRIVALS: Class starts promptly at the designated scheduled time. Arrivals more than 15 minutes after the painting session has started are welcome to paint, but will need to catch up on their own. Depending on the number of reservations in class, there may be a Floor Artist to assist you.
What is the cancellation/reschedule policy?
Due to the custom nature of our classes, ALL SALES ARE FINAL! The cancellation policy is based on class start times. NO REFUNDS will be issued for reservations. However, if you cancel with at least 48 hours' notice, your payment will be turned into a studio credit that can ONLY be used for a future class within 30 days. Please email us (firstname.lastname@example.com) to cancel. You may also reschedule into another event on our current class calendar. If you no-show for a class that you have a reservation for, or don't give at least 48 hours' notice of your cancellation, you forfeit your reservation payment. Seats are transferable, but you will need to notify the studio prior to the class with the name change. CLASS MINIMUM: If a public class does not meet the minimum of 6 painters, we reserve the right to cancel class. In this instance, you will be notified via email or phone and we will issue you a studio credit valid for 60 days or reschedule you into an upcoming class on our calendar. Refunds will not be issued. By purchasing your seats, you confirm agreement with this policy.


text:
Content Count2
Last visited
About Bishie
Thank you Moses.I will go along with the dealership DRB III scan tool.will let you know what happens.
Hello...My 1999 WJ 4.0 l6 can't start. It backfires through the throttle body when turning the engine over. Initially it showed these fault codes: P0340, P1765, P1391, P0531, P0761 and C214C, some codes disappeared except for P1391 and later P0301. The day it died, I filled the Grand Cherokee with gas to the brim, as I was making a long trip. That's when all hell broke lose. The engine had no power and was running as if it was cutting off fuel (pulsating), and it also increased fuel consumption significantly. By sheer luck i arrived at my destination. I also recall that the MIL light flashed for some time while en-route.The next day it started fine, though it idled roughly, especially in reverse gear. It finally died as we were running the engine to read live data with a scanner. We cleaned the injectors (not sure if it was properly done), and it became worse. I bought a set of upgraded (4 hole) Bosch fuel injectors, changed CPK and camshaft sensor, no difference. Can you please help me troubleshoot the problem? Presently the codes which are persistent when cranking are P0761 and C214C. I tried the quick start spray trick with no success. I have read threads about catalytic converter and camshaft target wheel. Can one of them or both cause it to backfire through the throttle body? Please help. I'm at my wit's end with this car. Bishie