How to add Android Studio created applications in android source code? - android

I have created an application in Android Studio. Now I want to add that project in android_source_code/packages/apps/ folder and build the entire AOSP image so that my app will be a system app.
Now the problem is the application is having a folder structure of Android Studio which is entirely different from Eclipse and android_source_code expects it to be in Eclipse folder structure format. So how can I achieve that?
Will android_source_code accepts the Studio folder structure or Do I need to write a script to transform the Studio folder structure to Eclipse format while copying to the android_source_code?
Any help will be appreciated.
Thanks

Integrating an Android Studio project into the AOSP build is not a trivial task. As far as I know, there aren't any dedicated tools to convert an Android Studio project (that is using the Gradle build system) to AOSP project (that is using the make build system).
One of the approaches you might want to investigate is creating your own Gradle task that will build the Android.mk file based on the source structure of you Android Studio project (i.e. finding all the relevant source sets for your JAVA files, resources, manifests, AIDLs etc ... and creating an Android.mk file that will tell the AOSP build system exactly wher to find each and every file).
This approach might work for relatively simple projects, but as soon as you start using more complex features (i.e. Modules, Manifest/Resources merging and so on), you will find it extremely difficult to generate the Android.mk without the help of the Gradle build system.
I would consider a different approach:
As a pre-installed privileged application, you can get the same privileges as a system application and perform whatever tasks you might wish to perform with no restrictions.
To do so, you can build your application using Android Studio, and define the already built APK as a BUILD_PREBUILT component that will be placed in the priv-app folder of the device.
Here is an exsample of the Android.mk file that will take your pre built APK and install it on the device as a pre installed application:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := your_app_name
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := .apk
LOCAL_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
In addition, depending on what your application needs to do, you might want to declare in your manifest that your application is a system app:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
...
android:sharedUserId="android.uid.system">

Related

Android Studio NDK: don't include system header files

Android Studio's NDK builder is fetching the wrong header file.
I am using source from a recent revision of tinyalsa in my Android application, and when I try to build the project in Android Studio, the NDK builder fetches the header file pcm.h from my system at /usr/include/tinyalsa/pcm.h instead of the one in my project's source tree.
How can I tell the builder to not look for the file in my system directory? I've already specified an include for the intended directory in my Android.mk
LOCAL_CFLAGS := -Itinyalsa-master/include
I think you also need to set the path for the include files - you need to set LOCAL_C_INCLUDES.
Your flag is fine, but the "includes" that you specify are relative to your app's app directory.
Change your flag to:
LOCAL_CFLAGS := -Isrc/main/<intervening-directories>/tinyalsa-master/include

Proper way to use 3rd party .so files in android

im stuck with this problem and dont know what im doing wrong. Please help me out.
Im working on an android project where I have to use 2 native library(.so) file. These 2 files are not generated by me, i just have to use them in my project.
I have placed these .so files under libs->armeabi folder. In the code i have used System.loadLibrary("name") inside a static block to load these library files. After doing this, i clean the project and run the application. I get the following error
java.lang.UnsatisfiedLinkError:
What am i missing. I have unchecked the first two options in build settings as well.
Note: I am not developing the native library. I am just using it. It was being used in a previous version, so I am pretty sure there is nothing wrong in the way the .so files have been generated.
PS: My ultimate requirement is like this,
My android application will have a jar which I am developing. The methods in the jar will make use of these native functions. The main application will not directly access the native functions. Should i place the .so files in the jar or should it be in the main application. How should i package the jar and .so files.
Please help me out, this is my first time using native functions and im totally lost. Links to any materials would be great. 
Set PATH to your NDK
Eclipse -> Window -> Preferences -> Android -> NDK -> set path to the NDK
Right click on an Android project and select Android Tools -> Add native support.
Make changes to your Android.mk file to include this .so file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := <module_name>
LOCAL_SRC_FILES := <.so file name>
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../jni/include
include $(PREBUILT_SHARED_LIBRARY)
Clean project and build again

How to add a new .cpp file to, and then build, a c++ library for Android?

I'm making a Unity3d plugin for this c++ library for Android. Ive gotten it to work in windows by opening the visual studio project the library makers provided, adding a new .cpp file to it with my API code and building to a dll.
I'm wondering now how I can add this new .cpp file to the library and build it for Android.
So far I have installed the Android sdk and ndk on a machine with ubuntu and successfully built the original library using ndk-build (as per these instructions)
I'm guessing it is not as simple as copying my .cpp file into the folder and building as there are AndroidManifest.xml files and so on.
The AndroidManifest.xml file is not pertinent for an NDK build.
You will need to find the appropriate Android.mk file. You may need to add the file name into the LOCAL_SRC_FILES in that make file, although they may have it set up to compile all the .cpp files in the directory or something more intelligent along those lines. It is, after all, a regular make file.
See here for info on the Android.mk file specifics.
Edit:
I suppose I should add that it would be the LOCAL_SRC_FILES preceding the relevant include $(BUILD_SHARED_LIBRARY) for the library you intend to build. Each make file may contain an arbitrary number of targets, although in the simplest case it's usually one make file to build a library.

How do I include in my Eclipse project, native Android code located in a directory external to my project?

I have an android test project that includes JNI code from elsewhere in my repository. For instance, my Android.mk file resembles the following:
LOCAL_PATH := $(call my-dir)
include $(LOCAL_PATH)/../../../Android.mk
I have opened my project in eclipse, enabled native support, and switched to the Android Native perspective. The project builds and runs correctly.
My problem is that my native c++ code is not present in the eclipse workspace. I can't see it under the jni folder or under any of the project's sub folders. My question is, how do I include the native code in my workspace so that I can edit it, and set breakpoints (via Sequoyah)?
You can add a linked folder to your eclipse project, see http://www.russellbeattie.com/blog/1002305

adding an external library in the Android CDT

I'm using the android ADT bundle for Linux with the CDT 8.0.2.+NDK support.
I need to add an external library. I checked on the Eclipse forum for example here:
linking-external-lib
The problem is that it looks like the Android CDT does not have the same settings. Neither of the three solutions can be applied.
Did anyone find the way to add an external .so library in eclipse with CDT?
Before I added the Native spport I used to have the .so file in the libs folder. Now the libs folder is cleared everytime I build the project. So I need to put it somewhere else.
I managed to do it by adding the following lines to the Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE:=libname
LOCAL_SRC_FILES:= path-to-lib/libname.so
include $(PREBUILT_SHARED_LIBRARY)

Categories

Resources