Bug: 5714516
The rationale behind this change:
- the library is compiled into a jar file, but its R class is generated
making the constant not constant (static, not final static) (aapt
option --non-constant-id). Also the jar file does not contain the R
class.
- this allows the integer value to not be inlined in the compiled
class files. Note that this prevents using switch statements.
- the main project use this jar file as a normal static library: it will
add all the class files except the R.class.
- the main project uses the library res folder as a resource
folder with lower priority than the main project (basically the
main project is an overlay. This is accomplished using aapt's
--auto-add-overlay to handle resources only in the main project
(which the normal overlay mechanism doesn't allow).
- the main project creates R classes in the main project's
package but also in the library's package. This is done with
aapt's --extra-packages which accept as many packages as
needed, separated by a :.
- manifest merging is not done yet, so
activities/services/permissions/etc... have to be manually declared in
the main app.
To use a static library with Android resource in your app,
1. Add the library's resource dir to your app as an overlay:
LOCAL_RESOURCE_DIR := <app_resource_dir> <static_library_resource_dirs>
2. Set the proper aapt flags:
LOCAL_AAPT_FLAGS := <apps_own_flags> --auto-add-overlay \
--extra-packages <lib1_package_name>:<lib2_package_name>:...
Change-Id: Ifb4d2300b952ea4aaee74da1bb0c6c72ea0698a3
Bug: 5620615
Before this change it only reports the limit if the real size exceeeds
or approaches the limit.
Change-Id: Ie1737d6ba2dc2d57ad82c487990e109882526d6e
Bug: 5573756
With this change, we can set LOCAL_EXPORT_C_INCLUDE_DIRS in the module
definition to export include dir paths.
Paths in LOCAL_EXPORT_C_INCLUDE_DIRS should be relative to the top dir
of the source tree.
If a library (shared or static) exports some include paths, any module
using it will import the include paths and add them to the compiler
command line.
Change-Id: I49aabc589d2cf214044d13ccd5532ef68209adf0
Before, if a module had several proto source files,
they would all be compiled in a single invocation
of aprotoc. If any of the files imported one of the
other files, you got an aprotoc error about duplicates.
And if you removed the files that were imported
from the list of source files, no Java code
would be generated for the imported files,
causing a Java compile time error.
This changes compiles each proto file separately, which
avoids both of the problems above. It's slightly more
inefficient, but aprotoc is really fast.
Change-Id: I7bd8092ec2953c20269367a1c68ff84acceea3be
To use the new aapt --preferred-configurations option. For use with Prime
to be able to strip everything but xhdpi density bitmaps selectively,
not stripping when this would result in no data for the resource.
Change-Id: I4e1012929b8f9b0b1e79c06496647f69661ba1f2
Aapt will discard the hidden files anyway.
With this change, we can avoid unnecessary rebuild if a module has only
hidden files in its resource dir.
Change-Id: Iaf0a13e038cca5fb60012c550cc90f7abbe967e1
$(eval) in the commands does not evaulate in the same order in emake as
in gmake. Using shell vars work in both makes.
Change-Id: I4e95adb2bc6f4600e29b9a8524275a099f47a401
Set LOCAL_GROUP_STATIC_LIBRARIES := true to group the static libraries,
in case we need gcc flags "-Wl,--start-group" and "-Wl,--end-group" to
fix circular references.
Change-Id: I03c4901670112fcdd2bb0fe660b6924e5776fcf8
Instead of using the DEFAULT_APP_TARGET_SDK, which is the hardcoded in
the build system, ie the sdk version of the current source tree.
Change-Id: I2fae3521300cc6b2449df3659ded7f7a397609c0
With this change, PRODUCT_LOCALES will contain only locales.
Other aapt config flags, such as *dpi, small/normal/large/xlarge,
should go to PRODUCT_AAPT_CONFIGS.
Bug: 4086309
Change-Id: I922f153d79777a9522c542a3907111193b40e7b7
This patch removes support for prelinking from the build system. By now, the
prelinker has outlived its usefulness for several reasons. Firstly, the
speedup that it afforded in the early days of Android is now nullified by the
speed of hardware, as well as by the presence of Zygote. Secondly, the space
savings that come with prelinking (measued at 17MB on a recent honeycomb
stingray build) are no longer important either. Thirdly, prelinking reduces
the effectiveness of Address-Space-Layout Randomization. Finally, since it is
not part of the gcc suite, the prelinker needs to be maintained separately.
The patch deletes apriori, soslim, lsd, isprelinked, and iself from the source
tree. It also removes the prelink map.
LOCAL_PRELINK_MODULE becomes a no-op. Individual Android.mk will get cleaned
separately. Support for prelinking will have to be removed from the recovery
code and from the dynamic loader as well.
Change-Id: I5839c9c25f7772d5183eedfe20ab924f2a7cd411
Added LOCAL_NO_CRT to enable building executables that do not link
to the C runtime library.
Removed support for LOCAL_MODULE_SUBDIR since it was broken
and unused. (Was going to use it but ended up using LOCAL_MODULE_PATH
instead.)
Change-Id: Ifed4ffe17003d90370c711ea6606e2b75e841dee
For some reason, all_objects was not listing objects generated from
objective-C sources. We need these for the emulator (which builds its
own version of SDL which uses Quartz on OS X).
+ Fix a typo in transform-host-m-to-o definition.
This also explains why https://review.source.android.com/#change,21074
had to be reverted, since it gets rid of the prebuilt SDL libraries when
building the emulator.
Change-Id: I173811cf11cdb5b045073aade59364236145bc77
Added LOCAL_NO_CRT to enable building executables that do not link
to the C runtime library.
Removed support for LOCAL_MODULE_SUBDIR since it was broken
and unused. (Was going to use it but ended up using LOCAL_MODULE_PATH
instead.)
Change-Id: I3b6f5ab7e5ae6aaa7119899adccece2b4ab1cbb3
This can fix the "@: command not found" messages, which is caused by "@"
in the middle of the shell command line.
Change-Id: I444827458045efcbc70a6e1e43bf4ee040e71b79
With "incrementaljavac" on your make command line, you will recompile
only Java source files that have been changed since last build.
Nothing is changed if "incrementaljavac" is not among your make goals.
Change-Id: Iae591459827df81ac91e95292464db5e9828343a
Acp can not handle high resolution file timestamp on ext4.
We need this to fix incremental build on ext4.
Change-Id: I54e45c73ffa44c4253c7a431375d419fa4dccfd9
This is needed in order to build Linux SDK binaries that can run
properly on Ubuntu 8.04 (Hardy). By default, the host toolchain
on 10.04 (Lucid) generates machine code that won't run on Hardy
due to GLibc ABI mistmatches.
Note that nothing happens if the new toolchain is not in the
prebuilt tree.
Change-Id: I914f5a303f16b6871759ce5a7178585ed3060870
This fixes the build error:
out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/neo_err.o:
file not recognized: File format not recognized
See also CL #84578
Change-Id: Ib91230c7a5c9809eb1935959eaa9be8fa7c596b9
This changes tries to reconcile drift between
transform-java-to-classes.jar which is used to build java for the
target with transform-host-java-to-package which is used for the
host. Several packages such as libcore are built both ways and the
drift between these rules was making it hard to make common changes to
things such as warning options.
The new compile-javac definition tries to include as much as possible
from the two previous definitions. Some conflicts it sorts out:
- hardwired -g vs PRIVATE_JAVAC_DEBUG_FLAGS
- consistent order of arguments
- moving PRIVATE_JAVAC_FLAGS to end to allow override of arguments
- xlint_unchecked is always conditional based on LOCAL_WARNINGS_ENABLE
Now what differs between the two is clear in the
transform-java-to-classes and transform-host-java-to-package
definitions. Notable differences:
- the target case supplies a bootclasspath while the host case does not.
- .class files are cleaned up after jaring in the target case,
but in the cost case they are left for the sake of the vm-tests target
which expects them to be present. That should probably be fixed in the future.
- PRIVATE_EXTRA_JAR_ARGS used to package resources into the jar only
happens for the host. Its handled by add-java-resources-to-package for the
target after dxing.
Change-Id: I2fb28f688fbb632102ca63448c2ac911db0477ae
This is needed in order to build Linux SDK binaries that can run
properly on Ubuntu 8.04 (Hardy). By default, the host toolchain
on 10.04 (Lucid) generates machine code that won't run on Hardy
due to GLibc ABI mistmatches.
Note that nothing happens if the new toolchain is not in the
prebuilt tree.
Change-Id: I45c1f68e37e15a0032f885df1c5c0f297b3d8642
The function image-size-from-data-size was using hard
coded values. The size of spare area and pages has become
configurable so we need to read from the variables.
Change-Id: I9461d34400ffc2cc5920860d8aa78750d559e397
Merge commit '5c41c17868865d1f2e9e2ff4680b528da61d16af'
* commit '5c41c17868865d1f2e9e2ff4680b528da61d16af':
Pass device characteristic information through to aapt.
is in a system header file. If so, the function can be prefixed by "rs". Otherwise,
"rs" prefix is rightly disallowed. So, no more "allow-rs-prefix" hacking.
Change-Id: I8d5982cd6a75d465ffa6f98ca96941ae761117a2
Merge commit '700b88e1451f216d137d8a356496bf51712512c6' into gingerbread-plus-aosp
* commit '700b88e1451f216d137d8a356496bf51712512c6':
Pass device characteristic information through to aapt.
A build configuration can define PRODUCT_CHARACTERISTICS, which is
a comma-separated list of device characteristics, for example
"nosdcard,grayscale". This will be passed through to aapt with
the --product flag.
Change-Id: I902c034b2f2824dbd2d33449308ee08beeb09551
Merge commit 'bf2ed191fe229b6a83684c19a57e11e7b50c8637'
* commit 'bf2ed191fe229b6a83684c19a57e11e7b50c8637':
Move odex related files to product-specific dir.
Merge commit 'a83940fa7851b35712e559be2246b56b5666b805' into gingerbread-plus-aosp
* commit 'a83940fa7851b35712e559be2246b56b5666b805':
Move odex related files to product-specific dir.
For target Java libraries, now the LOCAL_BUILT_MODULE includes both javalib.jar
and the .odex file, if dexpreopt is enabled.
These 2 files are moved to a product-specific dir in this change.
For target Java Libraries, $(intermediates) now points to the product-specific dir.
There is still a javalib.jar in the $(intermediates.COMMON) dir, which is used as dependency.
Nothing is changed for host Java libraries.
Change-Id: I2546dbb940c74537864ca002d1acb49bb731fbbc
Merge commit 'e52fddec86a808b98bcdd033704b43a83cf569ea'
* commit 'e52fddec86a808b98bcdd033704b43a83cf569ea':
framework-res is not used as regular Java library now.
Merge commit '879779a5806d6e09d1c852a93dd4e1793bbd96cd' into gingerbread-plus-aosp
* commit '879779a5806d6e09d1c852a93dd4e1793bbd96cd':
framework-res is not used as regular Java library now.
Merge commit 'd56d69b621bf41b478d59b6f987b6f796a9d8652' into gingerbread-plus-aosp
* commit 'd56d69b621bf41b478d59b6f987b6f796a9d8652':
Fix dependency when switching between build variants with and without Proguard.
With this change, in a user build the dependency looks like:
package.apk -> progaurd.classes.dex -> ... -> proguard.classes.jar
While in an eng build:
package.apk -> noproguard.classes.dex -> ... -> noproguard.classes.jar
Because package.apk is product-specific and removed when switching between
user and eng builds, it can always be built with the correct and up-to-date .dex file.
Bug: 3022484
Change-Id: I3a732cb3e256f193088c294dc4a0573188283cb2
Merge commit 'a90f9d2c299d7833b37f8a0e244a2893054d9ea5' into gingerbread-plus-aosp
* commit 'a90f9d2c299d7833b37f8a0e244a2893054d9ea5':
Warn when new modules are found that use user tags - DO NOT MERGE
It turns out we should also LOCAL_INSTRUMENTATION_FOR.
To disambiguate LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME is renamed to LOCAL_MANIFEST_INSTRUMENTATION_FOR.
Bug: 2902591
Change-Id: I6cb893c135736fc4170aa2259105b4c5eea798a1
Enabled compiler warnings by default and then modified javac
command to include warnings only if a project's warning flag,
LOCAL_WARNINGS_ENABLE, is set to true.
Change-Id: I5111d16a862f3afaaf1dcba2f2c2b7fc072613f1
With this change, you can add your .rs files to LOCAL_SRC_FILES.
The .rs files will be compiled by slang and the output .java files
will be compiled into the jar, while the generated .bc files will
be put into the final apk as raw resources.
Change-Id: Icde3d6139951d6d039b4b37376e72e1fc5c8b0d4
Merge commit '90cf34c72e204eb1d23f43d1fccbf2076e8ff67b'
* commit '90cf34c72e204eb1d23f43d1fccbf2076e8ff67b':
Support to build native libraries with prebuilt NDK
Merge commit 'f0f60cdd8f4f74b2480774887606afdebec8d891' into gingerbread-plus-aosp
* commit 'f0f60cdd8f4f74b2480774887606afdebec8d891':
Support to build native libraries with prebuilt NDK
Merge commit '0fd96df49ccecbf3628c95dabf3b94dfc27323e5'
* commit '0fd96df49ccecbf3628c95dabf3b94dfc27323e5':
Refactor Stripper. Allow a stripper other than SOSLIM to be specified
Merge commit '0af605f3b6e759f480a5124dc6b338ec58e1d40c' into gingerbread
* commit '0af605f3b6e759f480a5124dc6b338ec58e1d40c':
Allow to override --version-code and --version-name in LOCAL_AAPT_FLAGS
LOCAL_JNI_SHARED_LIBRARIES_ABI allows individual APKs to specify
specify the path where JNI shared libraries are stored in the APK. This
is useful if you want to build an APK that supports a generic version of
an ABI (e.g. armeabi) from a device configuration where
TARGET_CPU_ABI is set to a more specific version of an ABI (e.g.
armeabi-v7a.)
Note that specifying the LOCAL_JNI_SHARED_LIBRARIES_ABI does not
affect how the local JNI shared libraries are built. It just controls
where the local JNI shared libraries are placed within the APK.
Defaults to TARGET_CPU_ABI.
Change-Id: I1cbb293e0c953688945fc147c7fc367421cf860b
the original implementation directly embeds the filter variable into command
line; this implies that filter variable cannot contain any whitespaces,
otherwise it'll be misintepreted as a new command line argument to emma. the
side effect is that user will be forced to cram all filter related java
class/package names into one line, which could be very long. with this
change, user can use line continuation ("\") or appending ("+=") to break
up long filter specs.
Change-Id: I2c130033cdb5120251d6f84c3dd906d140d52991
commit 7401608f3b9b52b3348e32ec9fefe7583d6c2fa4
Author: Guang Zhu <guangzhu@google.com>
Date: Fri Apr 23 11:54:37 2010 -0700
collect emm meta files for emma instrumented build
when doing 'make dist', with EMMA_INSTRUMENT on the coverage.em files
generated for each module will be collected into one emma_meta.zip file
Change-Id: I382c39a97005e6cae5c79ad7eaef1c8857f658af
commit 8376d70938f6507d54b66fe5832a637aa883974e
Author: Guang Zhu <guangzhu@google.com>
Date: Wed Mar 10 15:48:03 2010 -0800
enhancement for building app with emma code coverage
* global filter to avoid applying instrumentation on emma classes
* remove local variable information at dex step instead of compile time
Change-Id: If04c27bc717f34816077a98ead9ceb0dbcbb0d2f
Change-Id: I971bd0f291bede2568b21347247d37a7d035c661
Merge commit 'f7c634216e673407f5a7a879bcf2ddb2454e4670' into kraken
* commit 'f7c634216e673407f5a7a879bcf2ddb2454e4670':
Replace arm with proper variable for CPU/ABI
Static libraries that include other static libraries were being incorrectly
built with .a files inside the top level .a file, as well as the .o files
that were extracted from the component .a files. This patch fixes the
final ar call to only add .o files to the archive.
Change-Id: Ic1ff025129e3c379fa56b4da2f09e9f16ea3c4fb
Also extending the arbitrary limit on build argument sizes,
which I ran up against in building after this change.
Change-Id: Iba79a37b27e7d5efa2b02a99aa253a2eec7ede75
* global filter to avoid applying instrumentation on emma classes
* remove local variable information at dex step instead of compile time
Change-Id: If04c27bc717f34816077a98ead9ceb0dbcbb0d2f
http://b/issue?id=2451361
With this CL, you can inherit a testing package to test a inheriting package.
Note: we change the meaning of $(5), so we need to change any existing calls
to inherit-package in other projects.
Change-Id: I673155d1b8b6006953d14e1ab87066536ebd1e54
With this change, you can specify "?" in place of a tag number in a
.logtags file and the build system will assign numbers to these tags.
(The numbers used shouldn't matter since we translate them back to tag
names whenever the logs are read back.)
This is pretty straightforward to do:
- make merge-event-log-tags.py assign numbers to any tags that specify
"?"
- make the generated java files depend on the merged output
- make java-event-log-tags.py read both the original .logtags and the
merged output, and fill in tag numbers for any "?" using the merged
version.
Change-Id: Icc6ccd705db461d570fc929922a830aa6deaca48
This change allows modules to insert different include paths before the system
include paths. STLPort uses this to find system include files that have the same
name.
The Dalvik core libraries team would like to start making warnings
errors in certain packages by definition LOCAL_JAVACFLAGS. This will
allow easier debuging of warnings in other packages by supplying
"-Xlint:..." options.
This lets you use the source code from one apk to build a new one
with a new module name, a new android package name and optionally,
a new certificate.
To use this, in a makefile, add this:
$(call inherit-package, \
packages/apps/Music/Android.mk, \
Music, \
MusicFork, \
my_cert, \
com.example.music)
You don't need the LOCAL_PATH and CLEAR_VARS stuff. It will override
only the packages that are defined in the makefile name you give, but
if other modules of other types are defined, you will get an error
saying that it's defined twice. In that case, you need to move the
duplicate library (for example a .so) out into a different makefile.
A LOCAL_OVERRIDES_PACKAGES entry is automatically created for the
forked app.
Three unrelated changes:
- change the add-radio-file makefile function to support adding files
with paths. (The path part of the pathname is stripped off.)
- add an UnmountAll function to the OTA script generation code, so
that we can explicitly unmount everything we've mounted (in addition
to doing it automatically at the end of the script).
- add the updater API version to the info object passed to
device-specific code.
Change-Id: Ia62b15403c1cc8fce8d9910f291450c8077e49f4
Nobody is using it any more, and it'd be too easy to
make a build system change that wouldn't properly handle it.
Change-Id: Ia61232ff944c34c46932c1885b2b0ec1b479566b
This allows to run droiddoc on only a specific set of subdirectories
instead of using all subdirectories.
Change-Id: I6b5daa31f6ce6801705a5c87bd05ea0e4e8c5d88
Construct the /system/etc/event-log-tags file by unioning together any
*.logtags files included in LOCAL_SRC_FILES throughout the system (with
appropriate error checking for dup tag numbers, etc.)
For java packages, generate a java source file from the logtags file for
that package that contains static integer constants for each tag name.
In particular don't put the symbol indices from included .a files into
them. I didn't change the equivalent device rule ala the "if it ain't
broke" rule of thumb.
Change-Id: I064ac356a6f48f93fca2cd08a8408ca835f8f9a4
By using 'aapt add' instead of whatever 'zip' utility happens to be
installed on the machine, we get files that are imgdiff-friendly,
which makes for smaller incremental OTAs.
(This is a cherry-pick of a change already submitted to eclair-mr2;
the change was approved for mr1.)
LOCAL_WHOLE_STATIC_LIBRARIES.
While I was in the territory, I reordered a few lines to be more
consistent with nearby code/files.
Change-Id: Ie9809f065e32ca748ae4539dd785980ff496c2d2
By using 'aapt add' instead of whatever 'zip' utility happens to be
installed on the machine, we get files that are imgdiff-friendly,
which makes for smaller incremental OTAs.
Our yaffs filesystems reserve 5 blocks, use 1 for a checkpoint, and
may use 1 or 2 more for caching. Take these all into account when
computing the max image size.
Merge commit '6929fb57a5afb90606feb8c35c8c2cda170adfe4'
* commit '6929fb57a5afb90606feb8c35c8c2cda170adfe4':
Fix issue #2048267: Run zipalign on all prebuilts
Make BoardConfig.mk store the size of the partition rather than the
maximum size of the image that can be flashed there, because the
function used to do the conversion isn't available when BoardConfig.mk
is read any more.
Change things so that when $(LOCAL_PREBUILT_STRIP_COMMENTS) is
nonempty, we copy the source file using sed to strip out all the "#
line"-style comments and blank lines, saving considerable system image
space in the case of some wifi configurations.
Bug: 2036961
This cuts the make startup time by about 30 seconds. Python is faster
than bash in this case, and also we can now supply multiple directories
to prune, and skip the .repo directory, which is, uh, big.
This is from my mac laptop:
$ time build/tools/findleaves.sh --prune="./out" . Android.mk > /dev/null
real 0m29.186s
user 0m0.550s
sys 0m5.897s
$ time build/tools/findleaves.py --prune="./out" . Android.mk > /dev/null
real 0m4.701s
user 0m0.645s
sys 0m1.294s
$ time build/tools/findleaves.py --prune="./out" --prune="./.repo" . Android.mk > /dev/null
real 0m0.176s
user 0m0.094s
sys 0m0.080s
Now, by default, instead of fully building everything,
we skip dexing the modules that aren't going to be included
in the current build.
This will slow down some of the incremental builds (like tests),
but it improves the regular eng build from 27.5 minutes on my
Mac Pro to 25 minutes. That's not as much of an improvement
as I had hoped for, but it's still better.
There is also a change in here that puts the java-source-list
file which is used to get around limited command line lengths
in the proper directory. Before this change, it was an
accident that the directory for that file existed!
The build servers have GNU coreutils 5.93, where stat does not output
a newline. Ubuntu hardy has GNU coreutils 6.10, where it does.
Lacking a newline messes up the summing of the sizes. Fix
get-file-size to remove the newline if present, and make the total
calculation in assert-max-file-size more robust.
Also, if the image was too big, it was not actually making the build
fail (because /bin/false was not the last thing called). Fix that so
it does.
There are currently two errors in the way we test the size of built
images against the size of the partition on the hardware:
- the limits in BoardConfig.mk are set with the data size only, but
images contain an extra 64 bytes per 2048-byte page. This means we
think the partition is about 1/32 smaller than it really is.
- when we deliver a build via OTA, the system partition ends up with
one more file than when it's flashed via fastboot. That file is a
copy of the recovery image. In order to be able to OTA a build, we
need to make sure the system partition has enough room for all the
system files plus the recovery image as well.
For the kila system partition, these errors are roughly the same order
of magnitude -- about 2MB, one in the "safe" direction, one in the
"unsafe" direction. This change fixes both to give us a more accurate
notion of how close we are to the limit.
Make the build emit a warning (but not fail) when the size is within
32kb of the limit.
Also, include the values of the partition size limits in an info file
in the target-files package, so post-processing tools can use them
without parsing the BoardConfig.mk file.
Non-HTC devices may have multiple files constituting their "radio
image". Generalize the INSTALLED_RADIOIMAGE_TARGET variable a bit:
initially define it as empty, then let AndroidBoard.mk files add to
it. Provide a convenience function add-radio-image for them to call
to add files. Put all those files into the target_files zip for use
in OTA and fastboot package construction.
Note that for HTC devices, this changes the name of the radio image in
the target_files zip: instead of "RADIO/image" it will be
"RADIO/radio.img". Tools that use the target_files zip will need to
be changed.
Currently, if LOCAL_WHOLE_STATIC_LIBRARIES is specified, its values is
ignored. This patch addresses this limitation and works as follows:
For every whole lib specified, it extracts the archive into a sub-directory
under the target lib's intermediate, and then seeds the initial target
archive with all the members.
Signed-off-by: Dima Zavin <dima@android.com>
This is needed to move our modified SDL sources under external/qemu/distrib.
As per joeo's request, this change also enables target Objective-C compilation, letting it error at build time.
Original change by joeo@abreu on 2009/04/06 19:54:13.
Implement SDK add-ons in the build system.
- Add an option to use the standard javadoc doclet instead
of droiddoc, since droiddocs non-sdk templates aren't
ready for prime time.
- Add the notion of a stubs for a library. It's only
implemented for java libraries, but when we do native
libraries in the NDK or sdk-addons, it will work there too.
Original author: joeo
Merged from: //branches/cupcake/...
Automated import of CL 145618