Ultimate guide to building an Android project – step-by-step tutorial with expert tips and tricks

How to build android project

Building an Android project allows you to create your own applications and customize them to suit your needs. In order to do this, you need to understand the rationale behind the different components involved in the building process. These components include resources.arsc, Gradle, manifest, javah, and more.

Using Gradle as the build system for your Android project provides a flexible and efficient approach. It allows you to define dependencies, configure build types, and specify different flavors for your app. Manifest and resources.arsc files contain important information about your project, such as the app’s package name, activities, and permissions.

To build Android projects that make use of native code, you need to pass appropriate command-line flags to the javah tool. This tool generates C headers from Java class files, allowing you to write native methods that can be called from Java code. When linking the native code, you must always include the generated .h file.

When building your Android app, you may encounter errors that can be hard to debug. To make debugging easier, consider using the ‘getmessage’ method on exceptions thrown during the build process. This will provide more detailed information about any issues that were encountered. Additionally, using the ‘suppress’ flag can help in ignoring warnings that don’t impact the functionality of your app.


When building an Android app, there are a few steps involved in the process. One important step is generating the APKs, which are the files that users will download and install on their devices. To generate these files, you’ll need to use the Android SDK’s build tools.

The build tools provide support for building and packaging Android apps. They can be used to compile your Java code into bytecode, link it with the necessary native libraries, and package it with all the necessary resources and assets. The build tools also handle other tasks, such as generating the R.java file that provides access to your resources, and merging the AndroidManifest.xml file that describes your app’s components and permissions.

In order to build your Android app, you’ll need to use the build tools’ command-line interface, which is called “gradle”. Gradle is a powerful build system that allows you to define your project’s build process using a Groovy-based DSL (Domain-Specific Language).

The build.gradle file is where you define your app’s build configuration. Here, you can specify things like the version of the Android SDK you’re using, the libraries you’re including in your project, and any additional build flags you need to pass to the underlying build tools.

To suppress lint warnings, you can use the “lintOptions” block in your build.gradle file. For example, you can set the “abortOnError” flag to “false” to allow the build to continue even if lint warnings are detected. However, it’s generally recommended to fix all lint warnings to ensure the quality of your code.

If your app includes any native code, you’ll need to use the “javah” tool to generate the JNI (Java Native Interface) header files. These files define the C/C++ functions that your Java code can call. The JNI header files must be placed in your project’s “jni” directory.

In addition to the build tools, you’ll also need to import the necessary libraries and resources into your project. These can be either from local sources or from a remote repository. To import a library from a remote repository, you’ll need to add its Maven coordinates to your build.gradle file.

The AndroidManifest.xml file is another important file in your project. It describes your app’s components (such as activities, services, and broadcast receivers) and their respective properties. It also specifies any necessary permissions that your app requires.

In summary, building an Android app involves generating the necessary files, linking them with native libraries, and packaging them with resources. This is typically done using the command-line build tools provided by the Android SDK. The build.gradle file defines the project’s build configuration, and the AndroidManifest.xml file describes the app’s components and permissions.

Linking your repository

Linking your repository

When building an Android project, linking your repository is an essential step to ensure that all the necessary source code and resources are included in your build. This process involves importing and linking external libraries or modules that your project depends on. Follow these steps to link your repository:

  1. Open your project’s gradle.properties file.
  2. Add the following code to your gradle.properties file:
  3. Save the changes and close the file.
  4. Open your project’s build.gradle file.
  5. In the dependencies block, add the following code:
    compile 'com.example:library:1.0.0'
  6. Replace com.example:library:1.0.0 with the actual repository and library you want to link.
  7. Save the changes and close the file.

By following this approach, you will be able to link your repository and import the necessary generated code into your project. This will make it easier for you to work with native code and access the resources written in your repository. Keep in mind that you may need to suppress lint warnings or include additional code in your AndroidManifest.xml file to support the linked repository.

If you encounter any issues with the linking process, make sure that the repository you are trying to link is valid and has the necessary code and resources. You may also need to pass additional flags to the build command to enable or disable specific features of the linked repository.

Linking your repository is an important step in building an Android project, as it ensures that all the necessary dependencies are included in your final APKs. Without proper linking, your project may not function correctly or could result in runtime errors. Take the time to understand the rationale behind linking and make sure to follow the correct steps for your project.


The rationale for building an Android project using a specific approach, like Gradle, with the generated code always written to the tmp/jnih directory, is to support the native code integration and make it easier to include native code in your application. Using Gradle allows for a simpler and more structured build process, with explicit dependencies and resources management.

By using Gradle, the build process can be automated, and it ensures that all necessary dependencies, like the Android Manifest file, resources.arsc file, and support libraries, are included in the final APK. This approach eliminates the need for manual linking of native libraries and reduces the chance of missing or incorrect configurations.

The use of Gradle also allows for the suppression of unnecessary warnings and messages during the build process. By specifying the necessary flags and properties in the Gradle build file, it becomes easier to control the output and ensure that only relevant information is displayed to developers.

In addition, the use of Gradle simplifies the management of dependencies and external libraries. It provides a central repository for managing and retrieving required dependencies, making it easier to add or update libraries in the project. This approach ensures that the project always uses the most up-to-date versions of the dependencies, improving stability and security.

The inclusion of native code in an Android project can provide performance optimizations or access to specific hardware features. By using a static Java/C++ interface (javah), developers can define methods that can be called from the native code. This approach allows for better integration between the Java and C++ layers of an application and enables the use of platform-specific features.

In conclusion, the rationale for building an Android project using Gradle, with the generated code always written to the tmp/jnih directory, is to support native code integration, simplify the build process, ensure the inclusion of necessary resources, suppress unnecessary warnings and messages, manage dependencies more effectively, and enable better integration between Java and C++ layers of the application.

Using Native Code

When building an Android app, you may come across scenarios where you need to use native code to achieve certain functionalities or performance optimizations. This involves writing code in languages like C or C++ and linking it with your Android app.

The first step in using native code is to create a new directory in your project called “jni”. This directory will hold all the native code files for your app. Inside this directory, you will typically create a file with the extension “.c” or “.cpp” that contains your native code.

One important thing to note is that Android apps are written primarily in Java. Therefore, if you are using native code, you need to use the Java Native Interface (JNI) to bridge the gap between the Java code and the native code.

To include native code in your Android project, you will also need to create a CMakeLists.txt file in the app module directory. This file will define how the native code should be built and linked with your app.

Once you have written your native code, you need to generate a C header file using the javah command. This header file will contain the necessary function signatures and other information required for calling the native code from your Java code.

After generating the header file, you can start writing the Java code that will call the native code. You can use the “native” keyword to indicate that a method is implemented in native code. The method signatures in the Java code must match those in the generated header file.

Before you can build your Android app with native code, you need to ensure that your development environment is properly set up. This includes installing the necessary tools and configuring the project properties.

When building the app, you will need tosuppress hard link checks for JNI shared libraries, as the JNI libraries are not included in the APKs by default. You can do this by setting the android.bundle.enableUncompressedNativeLibs flag in the manifest file to “false”.

Once the project is set up and the code is written, you can build your app by running the “ndk-build” command. This command will compile the native code and generate a shared library file (.so) that can be used in your Android app.

When running the app, the system will automatically load the native library and link it with your Java code. You can then call the native methods and pass any required parameters.

It’s important to note that using native code in your app should be approached carefully, as it can make your app harder to maintain and may introduce compatibility issues. Always consider the rationale behind using native code and make sure it’s necessary for your specific use case.


When building an Android project, there are several sources that are important to consider.

The resources.arsc file contains compiled resources such as images, layout files, strings, and styles. This file is autogenerated and is located in the app/build/generated/…/res directory.

The support library is an essential component for building Android apps. It provides backward compatibility for older versions of Android and includes additional features and APIs.

The build.gradle file is a configuration file for the project’s build process. It defines dependencies, build settings, and other important configurations.

To use native code in an Android project, you must write a JNI (Java Native Interface) wrapper. The javah command can be used to generate header files for C/C++ code.

The AndroidManifest.xml file is a crucial component of an Android project. It contains essential information about the app, such as its package name, permissions, activities, and services.

The tmpJniGenFolder is a temporary folder created during the build process. It contains generated JNI code.

The getMessage() method is an example of how to call native code from Java. This method must be declared as native and implemented in a C/C++ file.

The repository block in the build.gradle file specifies dependencies that are not available in the Android SDK repository.

The suppress warnings are annotations that can be used to suppress specific warnings during the build process. They are written as comments in the code.

The -include command allows you to include a file in a Makefile. This is useful for including pre-defined variables, functions, or rules.

The android:buildAndroidApp property is used to specify whether an app should be built for Android only or for multiple platforms.

The static keyword is used in C/C++ code to indicate that a method or variable is shared among instances of a class.

The import statement is used to import classes, packages, or interfaces into a Java program.

By understanding and utilizing these sources, you can build your Android app more efficiently and effectively.

Rate article
Add a comment

Verified by MonsterInsights