9.9 C
London
Wednesday, January 31, 2024

Gradle Tutorial for Android: Getting Began – Half 2


In Half 1 of this tutorial, you realized learn how to learn and construct Gradle recordsdata and learn how to handle dependencies in a number of methods. On this half, you’ll find out about barely extra advanced components of Gradle. By the tip, you’ll have the ability to:

  1. Signal your releases and have completely different construct varieties.
  2. Create Gradle duties and plugins.
  3. Create construct flavors for revenue.

Getting Began

Obtain the starter undertaking by clicking the Obtain Supplies hyperlink on the prime or backside of the tutorial. You’ll choose up the place you left off in Half 1.

This a part of the tutorial will concentrate on learn how to use Kotlin script, because it’s now the popular approach of writing Gradle recordsdata. Nonetheless, each little bit of Kotlin script code may have its Groovy equal so you may also find out about it. If the choice Groovy model doesn’t exist, you’ll be able to assume that the particular little bit of code you’re is an identical for each instances.

Getting Able to Publish: Working with Product Flavors and Construct Varieties

Within the final article, you completed constructing your app. Now, you’re considering of the way to revenue from it :]

Money money money

One resolution is to have a number of variations of your app: a free model and a paid model. Thankfully, Gradle helps this on the construct degree and means that you can outline the boundaries of various construct varieties. However earlier than you get began, it is advisable perceive how Gradle means that you can work with completely different app variations.

Introducing Construct Varieties

By default, there are two construct varieties – debug and launch. The one distinction between them is the worth of the debuggable parameter. In different phrases, you should use the debug model to assessment logs and to debug the app, however the launch sort is used to publish your app to the Google Play Retailer. Configure properties to the construct varieties by including the next code within the android block of your module-level construct.gradle.kts file:


buildTypes {
  launch {
  }
  debug {
  }
}

Specify the type-specific settings of your software within the debug and launch blocks.

Studying About Construct Signing

One of the crucial necessary configurations of the construct is its signature. And not using a signature, you gained’t have the ability to publish your software as a result of it’s essential to confirm you as an proprietor of the particular software. When you don’t must signal the debug construct – Android Studio does it robotically — the discharge construct needs to be signed by a developer.

Notice: To proceed, it is advisable generate the keystore to your launch construct. Check out this tutorial to discover a step-by-step information.

When your keystore is prepared, add the code beneath within the android block and above the buildTypes block (the order of declaration issues) of the module-level construct.gradle.kts file:


signingConfigs {
  create("launch") {
    storeFile = file("path to your keystore file")
    storePassword = "your retailer password"
    keyAlias = "your key alias"
    keyPassword = "your key password"
  }	
}

In the event you’re utilizing Groovy, add this code as a substitute:


signingConfigs {
  launch {
    storeFile file("path to your keystore file")
    storePassword "your retailer password"
    keyAlias "your key alias"
    keyPassword "your key password"
  }
}

Within the signingConfigs block, specify your signature information for the construct varieties. Take note of the keystore file path. Specify it with respect to the module listing. In different phrases, in the event you created a keystore file within the module listing and named it “keystore.jks”, the worth it is best to specify might be equal to the title of the file.

Replace the buildTypes block to signal your launch construct robotically:


launch {
  signingConfig = signingConfigs.getByName("launch")
}

And the Groovy model:


launch {
  signingConfig signingConfigs.launch
}

Or, in the event you’re utilizing Groovy:

Then, you’ll want to preserve keystorePassword.gradle.kts ignored by your model management system. Different methods embrace retaining the password in an OS-level setting variable, particularly in your distant Steady Integration system, similar to CircleCI.

  1. When you’ve printed your app to the Google Play Retailer, subsequent submissions should use the identical keystore file and password, so preserve them protected.
  2. Make certain NOT to commit your keystore passwords to a model management system similar to GitHub. You are able to do so by retaining the password in a separate file from construct.gradle.kts, say keystorePassword.gradle.kts in a Signing listing, after which referencing the file from the app module-level construct.gradle.kts through:
    
    apply(from = "../Signing/keystorePassword.gradle.kts")
    
    
    apply from: "../Signing/keystorePassword.gradle"
    

Notice: There are two necessary concerns associated to your keystore file:


apply(from = "../Signing/keystorePassword.gradle.kts")

apply from: "../Signing/keystorePassword.gradle"

Utilizing Construct Flavors

With a purpose to create a number of variations of your app, it is advisable use product flavors. Flavors are a method to differentiate the properties of an app, whether or not it’s free/paid, staging/manufacturing, and so forth.

You’ll distinguish your app flavors with completely different app names. First, add the next names as strings within the strings.xml file:


<string title="app_name_free">Socializify Free</string>
<string title="app_name_paid">Socializify Paid</string>

And take away the prevailing:


<string title="app_name">Socializify</string>

Now that the unique app_name string is now not out there, edit your AndroidManifest.xml file and substitute android:label="@string/app_name" with android:label="${appName}" contained in the software tag.

Subsequent, add the next code within the android block of your module-level construct.gradle.kts file:


// 1
flavorDimensions.add("appMode")
// 2
productFlavors {
  // 3
  create("free") {
    // 4
    dimension = "appMode"
    // 5
    applicationIdSuffix = ".free"
    // 6
    manifestPlaceholders["appName"] = "@string/app_name_free"
  }
  create("paid") {
    dimension = "appMode"
    applicationIdSuffix = ".paid"
    manifestPlaceholders["appName"] = "@string/app_name_paid"
  }
}

Right here’s what’s taking place within the code above:

  1. You must specify the flavour dimensions to correctly match the construct varieties. On this case, you want just one dimension – the app mode.
  2. Within the productFlavors, specify a listing of flavors and their settings. On this case, free and paid.
  3. Specify the title of the primary product taste – free.
  4. It’s obligatory to specify the dimension parameter worth. The free taste belongs to the appMode dimension.
  5. Because you wish to create separate apps without spending a dime and paid performance, you want them to have completely different app identifiers. The applicationIdSuffix parameter defines a string that’ll be appended to the applicationId, giving your app distinctive identifiers.
  6. The manifestPlaceholders means that you can modify properties in your AndroidManifest.xml file at construct time. On this case, modify the applying title relying on its model.

The Groovy equal could be:


// 1
flavorDimensions = ["appMode"]
// 2
productFlavors {
  // 3
  free {
    // 4
    dimension "appMode"
    // 5
    applicationIdSuffix ".free"
    // 6
    manifestPlaceholders.appName = "@string/app_name_free"
  }
  paid {
    dimension "appMode"
    applicationIdSuffix ".paid"
    manifestPlaceholders.appName = "@string/app_name_paid"
  }
}

Sync your undertaking with Gradle once more. After the undertaking sync, run the duties command, and see in the event you can spot what’s modified:

./gradlew duties

You’ll get an analogous checklist of duties to the one you bought while you ran this command the primary time:


...
Construct duties
-----------
...
assembleDebug - Assembles major outputs for all Debug variants.
assembleFree - Assembles major outputs for all Free variants.
assemblePaid - Assembles major outputs for all Paid variants.
assembleRelease - Assembles major outputs for all Launch variants.
...

Spot the distinction? Take a look at the duties beneath the Construct duties part, and also you’ll see some new ones there. You now have separate instructions for every construct sort and construct taste.

Run the command:

./gradlew assembleDebug

When the command completes, verify the output listing:


ls -R app/construct/outputs/apk

Right here’s what you’ll see:


free paid

app/construct/outputs/apk/free:
debug

app/construct/outputs/apk/free/debug:
app-free-debug.apk   output-metadata.json

app/construct/outputs/apk/paid:
debug

app/construct/outputs/apk/paid/debug:
app-paid-debug.apk   output-metadata.json

You need to have two builds generated – freeDebug and paidDebug.

Latest news
Related news

LEAVE A REPLY

Please enter your comment!
Please enter your name here