The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Name

Android::Build - Lint, compile, install, start an Android App using just the command line tools without using ant or gradle, just 100% Pure Perl

Prerequisites

 sudo apt-get install imagemagick zip openjdk-8-jdk
 sudo cpan install Data::Table::Text Data::Dump Carp POSIX File::Copy;

And a version of the Android Software Development Kit.

Synopsis

This file which can be found in the tar.gz file containing this module:

  SampleApp/perl/makeWithperl.pl

contains:

 use Android::Build;

 my $a = &Android::Build::new();

 $a->title        = qq(Generic App);                                            # Title of the app as seen under the icon
 $a->domain       = qq(com.appaapps);                                           # Domain name in reverse order
 $a->activity     = qq(Activity);                                               # Name of Activity = $activity.java file containing onCreate() for this app
 $a->icon         = qq(~/images/Jets/EEL.jpg);                                  # Image that will be scaled to make an icon using Imagemagick
 $a->sdk          = qq(~/Android/sdk/);                                         # Android SDK on the local machine
 $a->sdkLevels    = [15,25];                                                    # Min sdk, target sdk for manifest
 $a->androidJar   = $a->sdk."platforms/android-25/android.jar";                 # Android sdk jar
 $a->keyAlias     = qq(xxx);                                                    # Alias of key to be used to sign this app
 $a->keyStoreFile = qq(~/keystore/release-key.keystore);                        # Key store file
 $a->keyStorePwd  = qq(xxx);                                                    # Password for keystore

 $a->build(qw(run));                                                            # Build, install and run the app on the only emulator

Modify the values above to reflect your local environment, then start an emulator and run:

 perl SampleApp/perl/makeWithPerl.pl

to compile the sample app and load it into the emulator.

If you do not already have a signing key, you can create one with the supplied script:

 perl SampleApp/perl/generateAKey.pl

File layout

If your Android build description is in file:

 /somewhere/$folder/perl/makeWithPerl.pl

then the Java source and libs for your app should be in:

 /somewhere/$folder/src/*.java
 /somewhere/$folder/libs/*.jar

and the java package name for your app should be:

 package $domain.$folder

where:

 $domain

is your reversed domain name written in lowercase. Executing:

 use Android::Build;

 my $a = &Android::Build::new();
 ...
 $a->build(qw(run));

will copy the files in the 𝘀𝗿𝗰 and 𝗹𝗶𝗯 folders into an Android project created in the app build folder before starting the build of your app.

If this does not meet your requirements, then provide a 𝘀𝘂𝗯

 $a->copyFiles = sub ...

which will be called just before the build begins to allow you to copy in any other files needed to build your app.

Parameters

You can customize your build by assigning to or reading from the following methods:

activity

Optional: Activity name, default is 'Activity'

buildTools

REQUIRED: Name of the folder containing the build tools to be used to build the app

buildFolder

Optional: Name of a folder in which to build the app

copyFiles

Optional: Sub to copy additional files into the app before it is complied

debug

Optional: Make app debuggable is specified and true

device

Optional: Device to run on, default is the only emulator

domain

REQUIRED: Domain name for app

icon

Optional: Jpg file containing a picture that will be scaled to make an icon for the app, default is 'icon.jpg'

keyAlias

REQUIRED: alias used in keytool to name the key to be used to sign this app

keyStoreFile

REQUIRED: file name of key store

keyStorePwd

REQUIRED: password of key store file

log

Output: message log

libs

Optional: extra libraries

name

Optional: One word name of app, else the name of the folder: '../'

parameters

Optional: Parameter string to be placed in res for the app

permissions

Optional: Permissions, a standard useful set is applied

sdk

REQUIRED: Folder containing Android sdk

sdkLevels

Optional: [minSdkVersion,targetSdkVersion], default is [15,25]

src

Optional: Source of app, default is everything in './src' folder

target

Optional: Number of android sdk to use as found via `android list targets`

title

Optional: Title of app, default is the name of app

version

Optional: Version of app, default is today's date

Installation

Standard Module::Build process for building and installing modules:

  perl Build.PL
  ./Build
  ./Build test
  ./Build install

Author

philiprbrenan@gmail.com

http://www.appaapps.com

Copyright

Copyright (c) 2017 Philip R Brenan.

This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.