Add LOCAL_APK_LIBRARIES argument.

This allows you to build apks that link against other
apks using the framework's new shared library apk feature.

Also if you are using LOCAL_APK_LIBRARIES, then LOCAL_DEX_PREOPT
will not be allowed.  This is because using preopt means the
apk is stripped of its dex file, so the pre-installed apk can't
be redexed if its associated library changes.  (Even if the build
system didn't strip the dex, Dalvik still has issues because it
assumes a pre-odex file is always valid.)

Change-Id: I952c0d24f8975f75aff67f78b5faeec91144c3e7
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 494f75b..cffaa94 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -398,6 +398,20 @@
 full_java_libs += $(full_static_java_libs) $(LOCAL_CLASSPATH)
 full_java_lib_deps += $(full_static_java_libs) $(LOCAL_CLASSPATH)
 
+# This is set by packages that are linking to other packages that export
+# shared libraries, allowing them to make use of the code in the linked apk.
+LOCAL_APK_LIBRARIES := $(strip $(LOCAL_APK_LIBRARIES))
+ifdef LOCAL_APK_LIBRARIES
+  link_apk_libraries := \
+      $(foreach lib,$(LOCAL_APK_LIBRARIES), \
+        $(call intermediates-dir-for, \
+              APPS,$(lib),,COMMON)/classes.jar)
+
+  # link against the jar with full original names (before proguard processing).
+  full_java_libs += $(link_apk_libraries)
+  full_java_lib_deps += $(link_apk_libraries)
+endif
+
 # This is set by packages that contain instrumentation, allowing them to
 # link against the package they are instrumenting.  Currently only one such
 # package is allowed.
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 71ac963..000ba9e 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -90,6 +90,7 @@
 LOCAL_JNI_SHARED_LIBRARIES_ABI:=
 LOCAL_JAR_MANIFEST:=
 LOCAL_INSTRUMENTATION_FOR:=
+LOCAL_APK_LIBRARIES:=
 LOCAL_MANIFEST_INSTRUMENTATION_FOR:=
 LOCAL_AIDL_INCLUDES:=
 LOCAL_JARJAR_RULES:=
diff --git a/core/java_library.mk b/core/java_library.mk
index 62b16c3..d65a3ca 100644
--- a/core/java_library.mk
+++ b/core/java_library.mk
@@ -35,11 +35,13 @@
 LOCAL_DEX_PREOPT :=
 else
 ifeq (,$(TARGET_BUILD_APPS))
+ifeq (,$(LOCAL_APK_LIBRARIES))
 ifndef LOCAL_DEX_PREOPT
 LOCAL_DEX_PREOPT := true
 endif
 endif
 endif
+endif
 ifeq (false,$(LOCAL_DEX_PREOPT))
 LOCAL_DEX_PREOPT :=
 endif
diff --git a/core/package.mk b/core/package.mk
index 3a8e43a..25af8da 100644
--- a/core/package.mk
+++ b/core/package.mk
@@ -151,6 +151,7 @@
 LOCAL_DEX_PREOPT :=
 else
 ifeq (,$(TARGET_BUILD_APPS))
+ifeq (,$(LOCAL_APK_LIBRARIES))
 ifneq (,$(LOCAL_SRC_FILES))
 ifndef LOCAL_DEX_PREOPT
 LOCAL_DEX_PREOPT := true
@@ -158,6 +159,7 @@
 endif
 endif
 endif
+endif
 ifeq (false,$(LOCAL_DEX_PREOPT))
 LOCAL_DEX_PREOPT :=
 endif