[DAEMON-12] androidlib v2
GitHub Issue | n/a |
---|---|
Type | New Feature |
Priority | Critical |
Status | Resolved |
Resolution | Fixed |
Resolution Date | 2017-11-13T13:07:05.000+0000 |
Affected Version/s | n/a |
Fix Version/s | Appc Daemon 1.0.0 |
Components | androidlib |
Labels | n/a |
Reporter | Chris Barber |
Assignee | Chris Barber |
Created | 2016-02-04T03:10:12.000+0000 |
Updated | 2017-11-13T13:07:05.000+0000 |
Description
androidlib (https://github.com/appcelerator/androidlib) was originally built for early Hyperloop prototypes, but lacked the robustness and features of the Android tooling in the Titanium SDK. The purpose of this ticket is to update androidlib with the logic from the Titanium SDK while maintaining API consistency with ioslib and windowslib and preserving the features at androidlib supports.
The
The parent folder containing the
The parent folder containing the
)
* )
*
Detect installed Android environment
detect()
must return the following Android installation information:
* SDK information
** Path to the SDK
** Paths to each executable and .jar
file listed above
** build-tools
, platform-tools
, and tools
paths and versions
** Targets (SDKs, add-ons)
* NDK information
* Android home directory path
* Emulators
* Devices
When detecting the Android environment, there are a number of options that detect()
must accept and use to override the defaults. These include:
* bypassCache
(Boolean)- When true
, re-detects Android environment (default: false
)
* sdkPath
(String) - The path to an Android SDK
* ndkPath
(String) - The path to an Android NDK
* androidHomePath
(String)
* executables
(Object) - Key/value lookup of executable name (i.e. android
, adb
, dx
, etc) to its path
Android SDK
While there could be many Android installations, we only care about a single installation. To find it, search the the following locations:The sdkPath
specified in the detect()
opts
argument
ANDROID_SDK_ROOT
environment variable
ANDROID_SDK
environment variable
The parent folder containing the android
or android.bat
executable
The parent folder containing the adb
or adb.exe
executable
Various common paths
* Windows:%SystemDrive%
, %ProgramFiles%
, %ProgramFiles(x86)%
, %CommonProgramFiles%
, ~
* OS X/Linux: /opt
, /opt/local
, /usr
, /usr/local
, ~
In order for a path to be deemed a valid Android installation, it must have the following:
* build-tools/<version>/aapt
/ build-tools/<version>/aapt.exe
* build-tools/<version>/aidl
/ build-tools/<version>/aidl.exe
* build-tools/<version>/dx
/ build-tools/<version>/dx.bat
* platform-tools/adb
/ platform-tools/adb.exe
* platform-tools/lib/dx.jar
* tools/android
/ tools/android.bat
* tools/emulator
/ tools/emulator.exe
* tools/mksdcard
/ tools/mksdcard.exe
* tools/proguard/lib/proguard.jar
* tools/source.properties
* tools/zipalign
/ tools/zipalign
Detect installed Android targets (SDKs and Addons)
Required information: *id
(String) Example: "android-23"
* name
(String) Example: "Android 6.0"
* description
(String) Example: "Android + Google APIs"
* type
(String}} Either "platform"
or "add-on"
* api-level
(String}} Examples: "23"
, "N"
* sdk
(Number) Examples: 23
, 24
* abis
(Arrayskins
(Arrayrevision
(Number)
* path
(String)
* androidJar
(String) Path to android.jar
. Needed for aapt package
.
* aidl
(String) Path to framework.aidl
file.
* based-on
(Object) Used for add-ons and used to derive aidl
since only platform
has an aidl
file
* libraries
(Object) Map of add-on libraries. Used for for detecting if SDK supports maps, but this is probably not needed, just nice to have.
Android NDK
TODOAndroid Home Directory
Derived based onandroidHomePath
option, ANDROID_SDK_HOME
environment variable, or ~/.android
.
Emulators
An array of emulators containing the following information: NOTE: Incomplete *type
(String) Either "avd"
or "genymotion"
* name
(String) For Android emulators, this value is returned from avd name
when telnetting into the emulator. For Genymotion, we get this from VM name in VirtualBox using vboxmanage
.
* id
(String) Same value as name
. Devices do not have a name
, but we need a common identifier for the target, hence id
.
* abi
(String)
* api-level
Not possible to get with older versions of Genymotion, so just set to null
for Genymotion.
Android emulator specific:
* device
(String)
* path
(String)
* skin
(String)
Genymotion specific:
* guid
(String)
PR: https://github.com/appcelerator/androidlib/pull/5