appcompat_v7 vs \v7\appcompat library project - android

When I once built some simple project, Eclipse automatically generated appcompat_v7 library project in my workspace and include it in dependency list for my original project. Meanwhile, I downloaded new support library (via SDK manager) few times. Then I tried to built again the same project, but this time in dependency section, I manually removed appcompat_v7 and added project generated by successful built of Android-SDK\extras\android\support\v7\appcompat library project. This time I faced few build errors in original project, most of them being unable to find resources that match name "TextAppearance.AppCompat. ..." as parent style of some style tag in res\values\styles.xml (of original project). What am I missing ?

Eclipse handles appcompat with many problems. You always must:
Have a copy of appcompat library loaded into your workspace to import it in your project as library
Use the same support library version in your project and in the appcompat library. If you update the support library, update it manually in the appcompat and your project. Right button click over appcompat/project, Android Tools -> Add Support Library.
If you have style compile problems with appcompat library, use compileSdkVersion = 23, targetSdkVersion = 22
Finally, I will recommend to migrate to Android Studio too, much easier and much cleaner.

Later, I made a copy of Android-SDK\extras\android\support\v7\appcompat library project into my workspace (check box when making "new Android project form existing code") and original project compiles well. I considered as better practice not to copy appcompat, but rather to work through reference to it. That way I would have valid link to new version, when I upgrade support library over time. However it appeared as better move to make a copy.

Related

Using TabLayout in Android Eclipse project

I am trying to use a TabLayout in an Android project using Eclipse and Andmore but haven't been able to find a jar containing the required android.support.design.widget.TabLayout class.
Googling a bit, it seems I need the com.android.support:design:22.2.0 library. However, the latest version I can find in my SDK installation (under extras/android/support) is v17.
Where can I find this library (without having to migrate to Android Studio)?
Update your sdk using sdk manager.
With the help of a few other answers I finally managed to import everything. Putting it all together, just copyiing the jar into libs will not be sufficient. Here's how it works in Andmore (ADT should be similar but some options apparently differ):
Make sure your SDK is up to date. Specifically, you want the latest version of Extras > Android Support Library (should be version 22 or higher) and a matching version of Tools > Android SDK Build-tools.
If you have a copy of android-support-v4.jar in the libs folder of your app's source tree, replace it with a recent copy from <sdk>/extras/android/support/v7/appcompat/libs. (If you have other Android support JARs in that location, you may need to update those as well.)
Copy <sdk>/extras/android/support/v7/appcompat and <sdk>/extras/android/support/design into your workspace folder. (Not really necessary, but using a local copy will prevent polluting your SDK setup with Eclipse-generated files.
Select File > New... > Android Project.
Select Create project from existing source and select your copy of the appcompat folder. Be sure to select at least API 22 as a build target (I needed to use API 23, YMMV), and don't forget to give it a meaningful name.
When import has finished, open the properties of the new project, go to Android and check Is Library.
Repeat the same two steps to import the design library. After import, in its project properties, go to Android, and in Libraries add a reference to the appcompat project.
Open the properties of your app project, go to Android, and in Libraries add a reference to the design project.
I had to make some minor modifications to my source code as some resource identifiers are no longer constants as of API 14, requiring me to convert a switch statement to a series of ifs. After that, I could finally build my app.
This should work for other Android libraries as well – their locations are documented in http://developer.android.com/tools/support-library/features.html.
Edit: There may be an easier way: Both ADT and Andmore also have Android Tools > Add Support Library, which might make a few of the aforementioned steps easier, which installs the most recent version of the support library. But you still have to add them to your project by hand.
Got it. Everything's there if you update your SDK to the latest version, things are just a bit hidden in the folder tree. You'll need three JARs:
extras/android/support/v7/appcompat/libs/android-support-v4.jar (the file was already in my project but I upgraded it anyway – not sure if it was necessary)
extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar
extras/android/support/design/libs/android-support-design.jar
Copy these three to your project's libs dir, refresh your project in Eclipse (cleaning won't hurt as well) and you should be good.
Library locations are documented in http://developer.android.com/tools/support-library/features.html

Where did an additional `android-support-v7-appcompat` project come from in my workspace? Which one to use?

I have the latest Android Support library with Rev 22.2.1. I included the AppCompat v7 library from my SDK it in my workspace by following the guideline at the Android developer guides. Initially it included the project named appcompat_v7 in my project explorer. So far so good.
Then after creating a few projects and including a few other libraries like recyclerview and cardview and some third party library projects, I now notice two projects named appcompat_v7 and android-support-v7-appcompat in my project explorer.
This wouldn't bother me but now whenever I want to add the appcompat v7 library in my project, I am given both the options, and I get confused about which one to use. So the question is that where did android-support-v7-appcompat come from, and which one should I use when I want to include the v7 library in a project (also provided that the project is also using another third party library project).
Select Second Option AppCompat_v7
AppCompat_v7 is actually Android Support library which is introduced recently and is required for Application Compatibility for older versions of Android.
Please select second library (AppCompat_v7) as mentioned in above comment.
You can also read below articles if you need more info:
https://developer.android.com/tools/support-library/index.html
https://developer.android.com/tools/support-library/features.html

including support library in project

When i create a new Android project with min sdk as 2.2 in Eclipse , the support libraries are automatically added to Android Private Libraries, Android Dependencies and libs. That's probably because I had setup a support library project(appcompat_v7) earlier as per https://developer.android.com/tools/support-library/setup.html.
So my question is there a better way to include the support libraries in a project rather than have it appear all over the place? Is this the expected way?
Latest ADT automatically creates a new Android library project called appcompat_v7 in your workspace. This library project contains all the jar-files needed for supporting older Android version.
When you create a new Android application project, it will automatically receives a new dependency on that library project. It looks there is a small bug in ADT causing android-support-v4.jar to be added twice. You can safely remove android-support-v4.jar from the libs folder, as this jar-file is already available in appcompat_v7.
The best practice would be to keep a dependency on appcompat_v7 and delete duplicated android-support-v4.jar file.

Jar mismatch scenario

I'm encountering a lot of jar mismatch errors lately and I'd like to avoid them in the future.
So, here's my question: suppose I have an app that uses 2 library projects, both of which use the v4 support library jar. In total, I have 3 jar files. What can I do to avoid the jar mismatch error?
All I've read so far is the case where you have a project and a single library project. In this case, I think your supposed to delete the jar file in the project and keep the one in the library project.
This is quite common if your project references several libraries, and each library references the same other library.
An example of this, your app is referencing the android support library v4, and you have 2 libraries which are also referencing the support library v4.
If you update your apps reference to the support library, but you don't update the support library v4 in your other libraries you will see this error.
The best thing is on each referenced library and your app, right click on the project > android tools > add support library. This will get the latest version and you should no longer see these errors.
If you're facing mismatch issue then simply copy one of them and paste in remaining libraries. E.g. as you've 3 v4 support library jars then copy one of them and paste at place of remaining two jars.
Try to understood by my example I used Map and Facebook in My project now Facebook,Map and my project have Android support jar so i removed Android Support jar from Facebook,My project but remain jar on Map,now i'm addded Android-Map-Extension as library project on Facebook And finally add Facebook library project on My project .....

ActionBarSherlock android-support-v4 jar checksum difference

Can someone explain why the android-support-v4.jar included with ActionBarSherlock has a different size (and, therefore, checksum) then the one added automatically by Android when setting up a new project? Are their customizations to the support code included with ActionBarSherlock? If not, is it safe to replace this jar with android-support-v13.jar since it already includes all of the code in android-support-v4.jar?
Remove the default android-support-v4.jar from android project and copy that jar from ActionBarSherlock library project. or vice verse. It is safe.
That will resolve the confict.
Reason
It would be the reason that our sdk copies the newer version of that jar into new project but ActionBarSherlock would have the older version of the same.
The android-support-v4.jar included in ActionBarSherlock is 5 months old. Since then Google has released several new versions of the support library. Since the two versions differ their checksums won't match.
It is safe to replace the version included in ABS with the version you're using in your main project.
This is a more elegant fix than deleting and adding files!
You just need to :
Right Click the project App Free
Go To "Android Tools" > "Add Support Library"
Approve the permissions and let it update the library
Repeat this process for the project App Library
The Android Support Library will then be in sync (:

Categories

Resources