Differences between revisions 1 and 6 (spanning 5 versions)
Revision 1 as of 2014-10-07 14:38:27
Size: 1602
Comment: sketch out package naming conventions
Revision 6 as of 2014-10-07 17:23:03
Size: 4737
Comment: needs doing
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
* source package names are named after the git repository, prefixed by ''android-'' (e.g. [[https://android.googlesource.com/platform/system/core|android-platform-system-core]], [[https://android.googlesource.com/platform/system/extras|android-platform-system-extras]], [[https://android.googlesource.com/platform/build|android-platform-build]], [[https://android.googlesource.com/platform/frameworks/base|android-platform-frameworks-base]], etc.)
* binary packages of utilities that run on Debian directly are named after the utility itself (e.g. [[https://packages.debian.org/zipalign|zipalign]], [[https://packages.debian.org/aapt|aapt]], etc.)
* shared libraries that are only used by android-tools packages are named after the library, without a ABI version number in the package name, and prefixed by ''android-''. (e.g. [[https://packages.debian.org/android-libhost|android-libhost]], [[https://packages.debian.org/android-libcutils-dev|android-libcutils-dev]], etc.]] (''in the Google builds, these are built as static libraries, and linked statically into each binary, in the Debian builds, they are built as shared libraries and installed into /usr/lib/android'')
 * source package names are named after the git repository, prefixed by ''android-'' (e.g. [[https://android.googlesource.com/platform/system/core|android-platform-system-core]], [[https://android.googlesource.com/platform/system/extras|android-platform-system-extras]], [[https://android.googlesource.com/platform/build|android-platform-build]], [[https://android.googlesource.com/platform/frameworks/base|android-platform-frameworks-base]], etc.)

 * binary packages of utilities that run on Debian directly are named after the utility itself (e.g. [[https://packages.debian.org/zipalign|zipalign]], [[https://packages.debian.org/aapt|aapt]], etc.)

 * shared libraries that are only used by android-tools packages are named after the library, without a ABI version number in the package name, and prefixed by ''android-''. (e.g. [[https://packages.debian.org/android-libhost|android-libhost]], [[https://packages.debian.org/android-libcutils-dev|android-libcutils-dev]], etc.]] ''In the Google builds, these are built as static libraries, and linked statically into each binary. In the Debian builds, they are built as shared libraries and installed into /usr/lib/android''.

== Android's upstream version names ==

There are many [[https://source.android.com/source/build-numbers.html|naming]] [[https://en.wikipedia.org/wiki/Android_version_history|schemes]] for versions in Android, and none are used everywhere. For the Android OS itself, there are three schemes: version names, like ''Gingerbread'' or ''Kitkat''; version numbers, like 2.3.7 or 4.4.2; and, "API level" numbers, like `android-10` or `android-19`. None of these line up with each other. For example, the ''Jelly Bean'' name spans 4.1 through 4.3.1 and `android-16` through `android-18`. The version numbers and API level also do not line up, with `android-14` covering 4.0.1 - 4.0.2, `android-15` covering 4.0.3 - 4.0.4, but `android-16` covers all of 4.1.x.

The madness doesn't end there. Next up we have SDK version numbers, which are like 20, or 23.0.2. Part of the SDK includes the `build-tools` package, which has its own version numbers, which are like 18.1.1 and 20.0.0, but these do not line up with the SDK version numbers. The `platform-tools` seems to have its own versioning scheme also, but it is not really exposed. Then there are the NDK release numbers, which are like `r8b` or `r10`, and they also do not line up with anything else.

In the git repo, there are a mishmash of tags and branches that do not represent all of these various versions. There does seem to be consistent tagging of the OS releases, you can see those listed under [[https://source.android.com/source/build-numbers.html|Source Code Tags and Builds]]. There are a few branches that seem to line up to the SDK version numbers, like `tools_r21` and `tools_r22.2`, but there is not a complete set of those branches.

== Needs doing ==

There is lots left to do before someone can do Android development using only official Debian packages.

* figure out packaging scheme for various android "platforms", i.e. `/opt/android-sdk/platforms/android-*` and `/opt/android-ndk/platforms/android-*`
* figure out how to represent Android NDK gcc and clang "toolchains" in Debian, i.e. `/opt/android-sdk/toolchains`
* build "android support" jars
* help Google integrate Android's QEMU into upstream (since Google has started to do this, I think this is the best approach to getting the Android emulator into Debian)


=== low-hanging fruit ===

Here are a couple of easy tasks to do that will further this effort along:

* get answer from Google on how the SDK versions are marked in the source git repos (i.e. what tag/branch is SDK v23.0.2? And what tag/branch is `build-tools` v20.0.0?)
* [[http://anonscm.debian.org/gitweb/?p=android-tools/android-platform-system-extras.git|android-platform-system-extras]] package
* build `adb` as part of [[http://anonscm.debian.org/gitweb/?p=android-tools/android-platform-system-core.git|android-platform-system-core]] package, replacing the `android-tools-adb` package.
* build `fastboot` as part of [[http://anonscm.debian.org/gitweb/?p=android-tools/android-platform-system-core.git|android-platform-system-core]] package, replacing the `android-tools-fastboot` package.

This page is a gathering place for information about the android-tools packaging team, which is focused on packaging the Android development tools for Debian. There are also some packages which help run Debian in a chroot on Android.

Package naming scheme

The naming scheme for android-tools packages is as follows:

Android's upstream version names

There are many naming schemes for versions in Android, and none are used everywhere. For the Android OS itself, there are three schemes: version names, like Gingerbread or Kitkat; version numbers, like 2.3.7 or 4.4.2; and, "API level" numbers, like android-10 or android-19. None of these line up with each other. For example, the Jelly Bean name spans 4.1 through 4.3.1 and android-16 through android-18. The version numbers and API level also do not line up, with android-14 covering 4.0.1 - 4.0.2, android-15 covering 4.0.3 - 4.0.4, but android-16 covers all of 4.1.x.

The madness doesn't end there. Next up we have SDK version numbers, which are like 20, or 23.0.2. Part of the SDK includes the build-tools package, which has its own version numbers, which are like 18.1.1 and 20.0.0, but these do not line up with the SDK version numbers. The platform-tools seems to have its own versioning scheme also, but it is not really exposed. Then there are the NDK release numbers, which are like r8b or r10, and they also do not line up with anything else.

In the git repo, there are a mishmash of tags and branches that do not represent all of these various versions. There does seem to be consistent tagging of the OS releases, you can see those listed under Source Code Tags and Builds. There are a few branches that seem to line up to the SDK version numbers, like tools_r21 and tools_r22.2, but there is not a complete set of those branches.

Needs doing

There is lots left to do before someone can do Android development using only official Debian packages.

* figure out packaging scheme for various android "platforms", i.e. /opt/android-sdk/platforms/android-* and /opt/android-ndk/platforms/android-* * figure out how to represent Android NDK gcc and clang "toolchains" in Debian, i.e. /opt/android-sdk/toolchains * build "android support" jars * help Google integrate Android's QEMU into upstream (since Google has started to do this, I think this is the best approach to getting the Android emulator into Debian)

low-hanging fruit

Here are a couple of easy tasks to do that will further this effort along:

* get answer from Google on how the SDK versions are marked in the source git repos (i.e. what tag/branch is SDK v23.0.2? And what tag/branch is build-tools v20.0.0?) * android-platform-system-extras package * build adb as part of android-platform-system-core package, replacing the android-tools-adb package. * build fastboot as part of android-platform-system-core package, replacing the android-tools-fastboot package.