I just gone through native development in android. I am successful in getting my AndroidStudio 2.2.2 ready for native debelopment
I also build sample hello-jni project
What I am trying to achieve
I am trying to use an existing library designed in c++ (I will be provided with static library .a extension or .so file)
Few confusions regarding native developement
1) Shall I use the .cpp & .h files of the existing c++ library instead of .a or .so file ?
2) Do I need to make CMakeLists.text : So far as I googled my .a files is not generated using ndk-build , so I need to make it.
If I use .cpp & .h files , should I make Android.mk & Application.mk
Does CMakeLists.text compile my newly developed android project as library or my existing .a file ?
3) Where do I put the .a file in my project . Is it under jni folder?
4) Should my java class files should define methods with keyword native same like as implemented in c++ file (Example : In c++ file method name getData() , should java class contain public native getData() )
Ok so you have bunch of questions. Some of these questions are personal preference type but I will provide them as my personal choice.
1
This is your choice. I, personally, would use the compiled
.so
file. This way I never have to worry about NDK and CMake and .mk files. If you have the file, all you have to do is add the file to thelibs
folder (notlib
folder) and make a minor change to yourbuild.gradle
file. That's it.Change to build.gradle:
2 & 3
These would be irrelevant with this option.
4
You would have to do something like this no matter if you use the files or the compiled libraries:
And then, you can call those methods from your
Activity
/Fragment
.Hope this is clear enough.
EDIT (based on comment below):
1)
.so
or.a
files are your native libraries.2) the
.cpp
,.c
, etc. files are just your native source code files. If you were to use those files in the project, you would have to use a build system (for example, CMake) to use them. CMake would take your source code files and make a.so
library which is again the native library. This is why I suggested to use the.so
files because why do the work of implementing CMake in your project when you don't need to?If you want to try CMake or learn it in the future, check this answer: C/C++ with Android Studio version 2.2
3)
System.loadLibrary("my_native_lib");
: Here you are telling the Java runtime to add this given library. This way you are creating a link between Java and the C++ code that is within the library. The methods below that line should have the same name as they do in the C++/C code. This way Java runtime will find and open the library and look for those method in the library you load. See more hereThis may help You Add C and C++ Code to Your Project
From here