How to include an Android library inside Flutter plugin - android-library

I have custom native iOS and Android libraries. Now I need to create a Flutter plugin that includes these libraries for developing Flutter apps that use these libraries. I already set up the iOS library in the Flutter plugin project. But I am having difficulty including the Android library. The Android library is an .aar file. I searched online, but found limited information on this. None of the solutions work. Basically the issue is this: Direct local .aar file dependencies are not supported when building an AAR.
Here is one discussion on this. But I don't find any that works in my case.
stackoverflow.com/questions/60878599/error-building-android-library-direct-local-aar-file-dependencies-are-not-supp
Any help is greatly appreciated.

Since I can also use a .jar file, I used the solution from this link Calling native libraries in Flutter using Platform Channels.
To summarize it: First put the .jar file in a location, open the plugin project in Android Studio. Then from File menu, open Project Structure, select Modules, and then click + to add the .jar file. After that, from the plugin project's android folder, open build.gradle, add implementation file('path/to/jar'). in dependencies section.

Related

How to import Android library module (AAR) using gradle cli

I am developing an Android Library module in AAR format. I found it very troublesome to have to be manually importing the module via Android Studio wizard each time I need to test library changes on an Android sample app. I changed my approach to using a symbolic link and linking the generated AAR on the library side with the AAR on the sample app side and just building and syncing Gradle via Android Studio.
However, this process is still not the best because I need to manually click buttons on Studio to achieve this. What I would like is to write a simple script using Gradle CLI and/or bash that allows me, from the app's side, to import the module into the app from some directory and sync the app's Gradle after importing.
Is this possible? Thanks.
You don't need to import your library module every time. Make your library as one of the modules and link the dependency between app and library.
Make sure the library is listed at the top of your settings.gradle file, as shown here for a library named "my-library-module":
include ':app', ':my-library-module'
Open the app module's build.gradle file and add a new line to the dependencies block as shown in the following snippet:
dependencies {
implementation project(":my-library-module")
}
And build using command lines.
gradlew assembleDebug
https://developer.android.com/studio/projects/android-library

Why I can't add aar file to our library project and distribute it without aar?

we are getting really frustrated both financially and also in our project level. The root problem is that we have build an android library project, which uses another aar as a dependency. The clients which integrate our library have to manually include the aar and it does not work in all cases..
​
I can't understand why does https://bintray.com/ does not allow to publish library with added aar file inside of it? We have tried to create a same maven and even publish additional library, but client still need to include both libraries and not a single one..
Android team endorses multi module approach, so why there are no tools to easily integrate library, which has another library as a dependency?
Maybe someone had solved this issue or knows how to do what I have done?

How to create custom library with gradle `compile` support in AndroidStudio?

I'd like to create my own gradle library, that can be compiled into other projects using gradle compile statement.
Example from Picasso's README:
Download the latest JAR or grab via Gradle:
compile 'com.squareup.picasso:picasso:2.5.2'
I'm developing few applications that share common source: fragments, views, some logic... Sometimes I extend these sources while I'm developing app A, sometimes while I'm developing app B,... And I feel that copy-paste of packages/classes in Android Library Module is not an proper solution.
So I would like to setup my own library, that:
it could be easily deployed to as gradle library that could be used by compile.
I can easily develop/extend it together with currently developed application
Disclaimer: I had been googling it a lot, but without luck.
If you want to reuse a library across completely separate projects then you'll want to publish your library to repository. Assuming this is open source and you don't mind sharing, you could use JCenter, which is already added as a repository to Android projects by default.
https://www.virag.si/2015/01/publishing-gradle-android-library-to-jcenter/

Best way to incorporate Volley (or other library) into Android Studio project

I've seen different advice on the best way to do this This question covers creating a jar. Elsewhere, I've seen advice to simply copy the volley source into your own project. This section on libraries at android.com would seem the most authoritative. However, after compiling volley, I don't have an aal library, whereas that section says I should have.
So my question is this: I have an existing Android Studio project with a standard layout, and a git repository; what should I do to add volley? Where should I download it to? How should I add it to Android Studio? Which Gradle files, if any, do I need to modify.
Hopefully, for those of you have done this a few times, this should be bread-and-butter stuff, but I haven't been able to find a straightforward description.
--
Updating, per Scott Barta's suggestion.
The gradle.build file in the volley repository has this line.
apply plugin: 'android-library'
According to the documentation: "Library projects do not generate an APK, they generate a .aar package (which stands for Android archive)." However, when I build the volley project, no .aar is created.
My feeling is that as Volley is a library project, created by the Android team, it is most probably intended to be generated and used as .aar package. Any advice on whether it would be preferable to generate a .aar, and how to do that, would be appreciated.
As pointed out by others as well, Volley is officially available on Github:
Add this line to your gradle dependencies for volley:
compile 'com.android.volley:volley:1.0.0'
To install volley from source read below:
I like to keep the official volley repository in my app. That way I get it from the official source and can get updates without depending on anyone else and mitigating concerns expressed by other people.
Added volley as a submodule alongside app.
git submodule add -b master https://github.com/google/volley.git volley
In my settings.gradle, added the following line to add volley as a module.
include ':volley'
In my app/build.gradle, I added a compile dependency for the volley project
compile project(':volley')
That's all! Volley can now be used in my project.
Everytime I want to sync the volley module with Google's repo, i run this.
git submodule foreach git pull
LATEST UPDATE:
Use the official version from jCenter instead.
dependencies {
compile 'com.android.volley:volley:1.0.0'
}
The dependencies below points to deprecated volley that is no longer maintained.
ORIGINAL ANSWER
You can use this in dependency section of your build.gradle file to use volley
dependencies {
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
}
UPDATED:
Its not official but a mirror copy of official Volley. It is regularly synced and updated with official Volley Repository so you can go ahead to use it without any worry.
https://github.com/mcxiaoke/android-volley
Nowadays
dependencies {
compile 'com.android.volley:volley:1.0.0'
}
A lot of different ways to do it back in the day (original answer)
Add volley.jar as library
Download it from: http://api.androidhive.info/volley/volley.jar
Place it in your [MyProjectPath]/app/libs/ folder
Use the source files from git (a rather manual/general way described here)
Download / install the git client (if you don't have it on your system yet): http://git-scm.com/downloads
(or via git clone https://github.com/git/git ... sry bad one, but couldn't resist ^^)
Execute git clone https://android.googlesource.com/platform/frameworks/volley
Copy the com folder from within [path_where_you_typed_git_clone]/volley/src to your projects app/src/main/java folder (Integrate it instead, if you already have a com folder there!! ;-))
The files show up immediately in Android Studio. For Eclipse you will have to right-click on the src folder and press refresh (or F5) first.
Use gradle via the "unofficial" maven mirror
In your project's src/build.gradle file add following volley dependency:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// ...
compile 'com.mcxiaoke.volley:library:1.+'
}
Click on Try Again which should right away appear on the top of the file, or just Build it if not
The main "advantage" here is, that this will keep the version up to date for you, whereas in the other two cases you would have to manually update volley.
On the "downside" it is not officially from google, but a third party weekly mirror.
But both of these points, are really relative to what you would need/want.
Also if you don't want updates, just put the desired version there instead e.g. compile 'com.mcxiaoke.volley:library:1.0.7'.
As of today, there is an official Android-hosted copy of Volley available on JCenter:
compile 'com.android.volley:volley:1.0.0'
This was compiled from the AOSP volley source code.
UPDATE:
compile 'com.android.volley:volley:1.0.0'
OLD ANSWER:
You need the next in your build.gradle of your app module:
dependencies {
compile 'com.mcxiaoke.volley:library:1.0.19'
(Rest of your dependencies)
}
This is not the official repo but is a highly trusted one.
For incorporate volley in android studio,
paste the following command in terminal ( git clone https://android.googlesource.com/platform/frameworks/volley ) and run it. Refer android developer tutorial for this.
It will create a folder name volley in the src directory.
Then go to android studio and right click on the project.
choose New -> Module from the list.
Then click on import existing Project from the below list.
you will see a text input area namely source directory, browse the folder you downloaded (volley) and then click on finish.
you will see a folder volley in your project view.
the switch to android view and open the build:gradle(Module:app) file and append the following line in the dependency area:
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
Now synchronise your project and also build your project.
I have set up Volley as a separate Project. That way its not tied to any project and exist independently.
I also have a Nexus server (Internal repo) setup so I can access volley as
compile 'com.mycompany.volley:volley:1.0.4' in any project I need.
Any time I update Volley project, I just need to change the version number in other projects.
I feel very comfortable with this approach.
add
compile 'com.mcxiaoke.volley:library:1.0.19'
compile project('volley')
in the dependencies, under build.gradle file of your app
DO NOT DISTURB THE build.gradle FILE OF YOUR LIBRARY. IT'S YOUR APP'S GRADLE FILE ONLY YOU NEED TO ALTER
This solution is for Kotlin DSL (build.gradle.kts):
dependencies {
implementation("com.android.volley:volley:1.2.1")
// ...
}

Include another xcode project into my own

How can I include a project (is standalone) into my project and launch it from within my own app? What are the requiered steps so that my current project recognizes all the sourcecode from the other project?
If you are intending to run an application unmodified from another application, you can't do this. iOS expects you to have one application executable with one entry point and one app delegate.
If you have a library in source form that you would like to include in your project, you can simply drag the files into Xcode while your project is open.
If you drag an Xcode project file into the project navigator sidebar it will be added to the project setup.
You will need to configure import paths and other things in order to access code though.
If you are trying to use 3rd party libraries, I strongly recommend having a look at CocoaPods. It's really easy to set up and manages dependencies with all of their build settings for you.

Resources