Patch Support Library with Android Studio

I transferred my project to Android Studio a month ago, and I'm glad I did, despite the need to switch to a new (and more powerful) gradle system. One thing I would know in Eclipse, but I can't figure out how to do this, is fixing the support library. I know this doesn't sound like good practice, but a couple of code lines are driving me crazy, and the solution would be to just change it to solve my problem.
I tried changing the code in the sdk. \ Extras \ android \ m2repository \ com \ android \ support directory, but this does not seem to affect the code that is really used for compilation.
Any idea on how to achieve this?

Edit:

I tried to create the "SupportLibraryV4" module in my project, and this is what gradle says when I try to build it:

Error Code: 1 Output: trouble processing "java/android/support/v4/R$anim.class": Ill-advised or mistaken usage of a core class (java.* or javax.*) when not building a core library. This is often due to inadvertently including a core library file in your application project, when using an IDE (such as Eclipse). If you are sure you're not intentionally defining a core class, then this is the most likely explanation of what's going on. However, you might actually be trying to define a class in a core namespace, the source of which you may have taken, for example, from a non-Android virtual machine project. This will most assuredly not work. At a minimum, it jeopardizes the compatibility of your app with future versions of the platform. It is also often of questionable legality. If you really intend to build a core library -- which is only appropriate as part of creating a full virtual machine distribution, as opposed to compiling an application -- then use the "--core-library" option to suppress this error message. If you go ahead and use "--core-library" but are in fact building an application, then be forewarned that your application will still fail to build or run, at some point. Please be prepared for angry customers who find, for example, that your application ceases to function once they upgrade their operating system. You will be to blame for this problem. If you are legitimately using some code that happens to be in a core package, then the easiest safe alternative you have is to repackage that code. That is, move the classes in question into your own package namespace. This means that they will never be in conflict with core system classes. JarJar is a tool that may help you in this endeavor. If you find that you cannot do this, then that is an indication that the path you are on will ultimately lead to pain, suffering, grief, and lamentation. 1 error; aborting 

impressive!

+2
android android-studio android-support-library
source share
4 answers

Android sdk does not have all the necessary files to create a support library. You need to check additional repositories from https://android.googlesource.com :

  • platform / framework / support
  • platform / prebuilts / gradle -plugin
  • Platform / prebuilts / maven_repo / android
  • Platform / prebuilts / SDK
  • Platform / prebuilts / tools

Please keep the directory structure as in the Android repository.

Now you can change any code in the support library. If you need to change the support library for api v.4, execute it in "platform \ frameworks \ support \ v4". To create a patched version of the support library, use gradle with the following command:

 platform\frameworks\support\v4\gradle clean jar 

The resulting jar can be found in "platform \ out \ host \ gradle \ frameworks \ support \ v4 \ libs \". Put it in the libs folder of your project and add the build.gradle file.

+3
source share

Updated answer 2016 for Linux and OS X using a packaged gradle shell instead of installing gradle:

Checkout the following repositories from https://android.googlesource.com and save the directory structure:

  • platform / framework / support
  • platform / prebuilts / gradle -plugin
  • Platform / prebuilts / maven_repo / android
  • Platform / prebuilts / SDK
  • Platform / prebuilts / tools
  • Platform / tools / external / gradle

Change files in the library:

  • Change files in platform/frameworks/support/

Create AAR

  • cd platform/frameworks/support
  • ./gradlew jarRelease
  • The result of .aar is in platform/out/host/gradle/frameworks/support/<module>/build/outputs/aar/

Add to project

  • Create the libs/ folder next to your build.gradle application
  • Add the libs folder for the .gradle assembly: repositories{ flatDir{ dirs 'libs' } }
  • Copy the .aar file to libs/
  • Add aar to the dependencies section in the build.gradle file, for example: dependencies { compile(name:'my_custom_supportlib_module', ext:'aar') }

The module is already in the project

When you fix a support library module that other modules depend on, you will have it twice as a result of errors causing the assembly. This can be avoided by eliminating the original dependency.

If you, for example, pay recyclerview-v7 and add

 dependencies { compile(name:'recyclerview-v7-release', ext:'aar') } 

you must eliminate such a dependency. Change

 compile "com.android.support:design:24.2.1" 

to

 compile("com.android.support:design:24.2.1") { exclude group: 'com.android.support', module: 'recyclerview-v7' } 

for all modules that depend on the corrected module.

+1
source share

Reserve SupportLib and add it manually as a jar:

  • Put the SupportLib jar in the libs folder
  • Right-click and click Add As Library
  • Make sure the compilation files ('libs / supportlib.jar) are in the build.gradle file
  • Do a clean build

Disclaimer: Android Studio: Add jar as a library?

0
source share

It turns out that the answer Ilya Tretyakov works only for parts of the support library that do not have resources, because they cannot be placed in .jar .

The correct way to create, for example, a design support library:

check these repositions from https://android.googlesource.com and save the file structure:

  • Platform / Framework / Support
  • Platform / prebuilts / gradle -plugin
  • Platform / prebuilts / maven_repo / android
  • Platform / prebuilts / SDK
  • Platform / prebuilts / tools

go to the platform / frameworks / support / design and edit any file you want. Now rebuild everything with gradle clean assembleRelease

you can find the resulting support-design-release.aar library file in platform/out/host/gradle/frameworks/support/support-design/build/outputs/aar

create the app/libs folder in your project and edit app/build.gradle :

 repositories{ flatDir{ dirs 'libs' } } dependencies { compile(name:'support-design-release.aar', ext:'aar') } 

do a clean overhaul of your project and everything will work as intended

0
source share

All Articles