I have read the overview for Android Library project. I have in mind to develop an Android project library containing native libraries and JNI wrapper which would be included into the Android project. However, the doc does not explicitly mention if Android library project can include native libraries.
Can anyone confirm/infirm support for native libraries in Android library projects ?
As Android Document said:
An Android library project is a development project that holds shared
Android source code and resources.
An Android Library Project, in fact, isn't so different from normal Android project. You can make a normal android project as library project, except asset folder. They're just different when you declare in Eclipse Buid Path or something similar in other IDEs.
Native support simply, just a call to native layer (as in your post, Native Library) such as C/C++ library file (*.so file). This function is not specific to Android, but in normal Java project also support this feature: Calling functions from another language inside Java.
So, in short answer, yes :)
Related
I have an android app using android libraries (dependencies in build.gradle), that I want to use in Xamarin Forms app.
I have prepared android class library with dependencies that I need, add it to Android app and it works as should. Now I want to extract library (not app) - .aar file or other type. Then in Visual Studio create android binding library project, add android library (f.e. aar) under "Jars" folder, compile .dll file and in Xamarin Forms project, add reference to .dll and get needed functionality.
Xamarin app accept binding library, it knows android studio library package, tries to execute method, but then problem occurs "Java.Lang.NoClassDefFoundError". Aar is very light about 40KB, seems like it does not include the library I need, but just reference. Is there a way, that I can have those methods in dll library? I have tried exporting .jar file (weight about 2 MB) but it is also missing classes.
I have looked at Use prebuilt JNI library in Android Studio 3.1 and How to use .so in a second project in Android?. The first is trying to get a library file without headers working and the other seems to be focusing on a specific issue with his build (although there's some useful information there). I'm relatively new to app development and especially to native development on android. I've gotten a build with the JNI library and some c++ code working, but that seems to be just for building from source.
It's probably a simple answer, but I haven't been able to find documentation on this specifically in the android developers documentation. I'm interested in understanding the correct (or most conventional) place to put and way to use a precompiled library (module/lib/*.so and module/include/*.h) in an android project. Would I even need to use JNI or the NDK if the library is built with another build tool? Another project I have has a native library source object (*.so) in ./obj/local, ./libs, and in many other folders related to JNI. I'm guessing it would be somewhere in there, but I'd like to know what is conventional.
For some context, I'm trying to work with the essentia library. I have followed the guide on compiling for Android and have a build with the general hierarchy mentioned above (essentia/lib and essentia/include) that seems to be working.
We have teams which are working on different different technologies. Currently struggling with integration of android native module (Developed in android native language) with existing Xamarin android project.
Actually I got one way that we can convert android native project as a library. This library can integrate to Xamarin project.
I had gone through below links
Convert existing project to library project in Android Studio
https://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/ ( Integration of android library in xamarin project)
Is this the correct way or do we have any alternate way to achieve it?
Is this the correct way or do we have any alternate way to achieve it?
The document Using Native Libraries is talking about how to use .so file (native libraries) in Xamarin.Android, here is the example.
It is recommended that using Binding Java Library. You could convert your android native project to a .jar or .arr file, then you could refer to Binding a .JAR or Binding an .AAR.
If there is any problem when you trying binding Java Library, you could refer to Troubleshooting Bindings.
I am currently working on an android project that requires me to make use of functions included in a shared library (.so). I also only have header (.h) files for the library provided to me.
Is it possible to work with just these two files? Or do I need to create my own implemenations via c++ codes?
I am using Android Studio intend to use CMake.
Regards,
Philip
Most Android apps are written in Java. Google has released the Native Developer Kit (NDK) in order to allow developers to write libraries in C++. However, these libraries are usually very low level and called from the Java code which defines the UI and higher-level app logic. Most likely you will need to write a wrapper for the library so that you can call it from Java code. Looks like this blog is a good place to start.
I'm trying to integrate this specific library to my Android project, and the library is written in C/C++. I've miraculously gotten ndk-build to give me the needed .so file.
However, looking at it, there's a sample in the project, and they use a mysterious .jar with the API bindings of the .c/c++ files.
How do i either
create this special .jar file that has the API, based on the .so?
OR
directly add a method to the main c++ file and then call it from Java?
I've tried to re-wrap things using JNI, but it definitely doesn't seem to work. i keep getting UnsatisfiedLinkError.
A lot of the documentation online uses jni as the tutorial. i'm happy with just a few links to tutorials on JNA.
JNA provides a stub native library, libjnidispatch.so for a variety of platforms. You can build this library yourself, or extract one of the pre-built binaries from the project's lib/native/<platform>.jar packages.
You include libjnidispatch.so in your Android project the way you would any other JNI library. This is required; you cannot rely on JNA to dynamically unpack and use its native library automatically like on other platforms. The JNA project includes details for doing so (as well as instructions for building libjnidispatch.so yourself).
You then use jna.jar as you would any other Java jar file, and write your own (Java) mappings to match the native library you're trying to access. There's also a jna-min.jar which omits all the native platform libraries that are normally bundled in jna.jar.
Do go to project properties and build paths and remove JNA 4.0 and related classes.
This will work!