Since Titanium SDK 9.0.0 the gradle build system is used to create the Android apps and modules.
This brings a lot of advantages makes it quicker and easier to build apps and modules (e.g. dependencies are handled automatically). You can use the build.gradle
file to include external libraries into your modules or app.
In Ti.Animation we use:
repositories {
google()
jcenter()
}
dependencies {
implementation 'com.airbnb.android:lottie:3.4.0'
}
to add the external library and with Android Studio you can even use full auto-completion when you write a Titanium module now!
Local libraries
While this works great for external libs that are available at maven, google or another repository it doesn’t work for local AARs (they are not build into the module, so not available in the app later on).
You still can use them but you have to add some extra work. Here are three different ways:
1. Only a JAR in the AAR
An AAR file is just a compressed packaged including different files. If your AAR does not contain any “res” files or AndrodManifest.xml settings file you can just unzip the AAR and use the “classes.jar” instead. JARs will be merged into your module. Place them in the /lib folder and build your module.
AAR with res folder
Another approach is to unzip the AAR and copy its JAR, AndroidManifest.xml settings, and res files into the module project. While this is fine for simple AARs it is not recommended for comlex ones.
2. Use the AAR
If there are other files inside the AAR file you have to include the whole file. Since it is not bundled in the compiled module you can add it to your app later on again.
As an example we will use the Polar BLE SDK (https://github.com/polarofficial/polar-ble-sdk). Download the AAR and put it into the module libs folder and add this to the build.gradle
file:
repositories {
maven { url "https://oss.jfrog.org/libs-snapshot" }
}
dependencies {
// old method; looks like newer gradles versions don't support this
//
// implementation files('../../libs/polar-ble-sdk.aar')
// implementation files('../../libs/polar-protobuf-release.aar')
// new version
compileOnly files('../../libs/polar-ble-sdk-1.0.0.aar')
compileOnly files('../../libs/polar-protobuf-release.aar')
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
}
Inside the java source file (e.g. TiPolarModule.java
) we add the following method:
import polar.com.sdk.api.PolarBleApi;
import polar.com.sdk.api.PolarBleApiDefaultImpl;
@Kroll.method
public void create()
{
PolarBleApi api = PolarBleApiDefaultImpl.defaultImplementation(TiApplication.getAppCurrentActivity(), PolarBleApi.FEATURE_HR);
Log.i("Polar", "Version: " + PolarBleApiDefaultImpl.versionInfo());
}
so we can check that the module is working inside the app.
Now it is time to build the module and copy the zip into the Titanium app.
Inside the app you place the aar files into ./app/platform/android
and Titanium will automatically include all AARs/JARs in that folder.
Titanium’s build system copies the ./platform/android
file tree to the generated Android app ./build/android/app/src/main
folder. Those AAR/JAR files are included by the global app build.gradle
In your code file add this:
var window = Ti.UI.createWindow({title: "Test"});
var polar = require("ti.polar");
polar.create();
window.open();
The output will be something like [INFO] Polar: Version: 2.2.2
.
3. Use a local repository
create a local maven repo with mvn archetype:generate
and follow the menu. The main parts you have to set are groupId
(e.g. org.company) and artifactId
(e.g. moduleName). It will generate a folder with a pom.xml file for you. A short cut command is mvn archetype:generate -DgroupId=org.mycompany -DartifactId=moduleName -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Then you have to connect your module with the maven repo by running
mvn install:install-file -Dfile=/home/miga/download/lib.aar -DgroupId=YOUR_GROUP_ID -DartifactId=YOUR_ARTIFACT_ID -Dversion=1.0.0 -Dpackaging=aar -DlocalRepositoryPath=/path/to/maven/repo/from/before
and it will add the aar to the local repo.
In the module AND app add this to your build.gradle:
repositories {
maven {
url '/path/to/maven/repo/'
}
}
dependencies {
implementation 'YOUR_GROUP_ID:YOUR_ARTIFACT_ID:1.0.0'
}