Group: Hardware/History/Howto have a free android sdk
Contents
Update
aaronw in #libreplanet found that: http://code.google.com/p/android/issues/detail?id=1261
Rationale
A free SDK could permit us to develop free applications for the androids phones such as a replacement for non-free applications that runs on the androids phones such as the market
Documentation on howto compile it
The problem is that with the JDK6(icedtea is a JDK6) we get that error:
$ make sdk build/core/product_config.mk:261: WARNING: adding test OTA key ============================================ TARGET_PRODUCT=freerunner TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID= ============================================ find: File system loop detected; `./external/alsa-lib/include/alsa' is part of the same file system loop as `./external/alsa-lib/include'. Removing from sdk: : out/target/product/freerunner/system/bin/dbus-daemon : out/target/product/freerunner/system/lib/libdbus.so : out/target/product/freerunner/system/xbin/dbus-monitor : out/target/product/freerunner/system/xbin/dbus-send : out/target/product/freerunner/system/xbin/hcidump : out/target/product/freerunner/system/xbin/opcontrol : out/target/product/freerunner/system/xbin/oprofiled target Jar: core-tests (out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar) Install: out/target/product/freerunner/system/app/Mms.apk Finding NOTICE files: out/target/product/freerunner/obj/NOTICE_FILES/hash-timestamp Combining NOTICE files: out/target/product/freerunner/obj/NOTICE.txt Finding NOTICE files: out/host/linux-x86/obj/NOTICE_FILES/hash-timestamp Combining NOTICE files: out/host/linux-x86/obj/NOTICE.txt Combining NOTICE files: out/target/product/freerunner/obj/NOTICE.html gzip -c out/target/product/freerunner/obj/NOTICE.html > out/target/product/freerunner/obj/NOTICE.html.gz Target system fs image: out/target/product/freerunner/obj/PACKAGING/systemimage_unopt_intermediates/system.img Install system fs image: out/target/product/freerunner/system.img Package: out/target/product/freerunner/freerunner-img-eng.android.zip Docs droiddoc: out/target/common/docs/dx javadoc: error - In doclet class DroidDoc, method start has thrown an exception java.lang.reflect.InvocationTargetException com.sun.tools.javac.code.Symbol$CompletionFailure: class file for sun.util.resources.OpenListResourceBundle not found 1 error make: *** [out/target/common/docs/dx-timestamp] Error 45
According to the search engines it's not specific to my target but it's a classic error when someone doesn't have the old non-free java5 version
My first try was to try to add the missing class:
so I added the class in /home/android/koolu/build/tools/droiddoc/src
cd /home/android/koolu/build/tools/droiddoc/src mkdir -p sun/util/resources/ cp ~/errors/OpenListResourceBundle.java sun/util/resources/
And I modified the Android.mk like this:
LOCAL_SRC_FILES := \ + sun/util/resources/OpenListResourceBundle.java \
while it compiled the class and added it where it should do it didn't work and I had the same error(I didn't understand if it came back later or if the build process had rebuild more things before failing)
Then I tried to add :
LOCAL_DROIDDOC_USE_STANDARD_DOCLET := true
in /home/android/koolu/buildspec.mk It didn't worked...so I did something ugly:I added it to the top of this file instead:
/koolu/build/core/droiddoc.mk
and it passed the error with a lot of warnings
How/Why it works
here's the interesting part of the Makefile
ifneq ($(strip $(LOCAL_DROIDDOC_USE_STANDARD_DOCLET)),true)
##
##
## droiddoc only
##
##
droiddoc_templates := \
$(shell find $(LOCAL_DROIDDOC_TEMPLATE_DIR) -type f) \
$(shell find $(LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR) -type f)
droiddoc := \
$(HOST_JDK_TOOLS_JAR) \
$(HOST_OUT_JAVA_LIBRARIES)/droiddoc$(COMMON_JAVA_PACKAGE_SUFFIX) \
$(HOST_OUT_JAVA_LIBRARIES)/clearsilver$(COMMON_JAVA_PACKAGE_SUFFIX) \
$(HOST_OUT_SHARED_LIBRARIES)/libclearsilver-jni$(HOST_JNILIB_SUFFIX)
$(full_target): PRIVATE_DOCLETPATH := $(HOST_OUT_JAVA_LIBRARIES)/clearsilver$(COMMON_JAVA_PACKAGE_SUFFIX):$(HOST_OUT_JAVA_LIBRARIES)/droiddoc$(COMMON_JAVA_PACKAGE_SUFFIX)
$(full_target): PRIVATE_CURRENT_BUILD := -hdf page.build $(BUILD_ID)-$(BUILD_NUMBER)
$(full_target): PRIVATE_CURRENT_TIME := -hdf page.now "$(shell date "+%d %b %Y %k:%M")"
$(full_target): PRIVATE_TEMPLATE_DIR := $(LOCAL_DROIDDOC_TEMPLATE_DIR)
$(full_target): PRIVATE_CUSTOM_TEMPLATE_DIR := $(LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR)
$(full_target): PRIVATE_IN_ASSET_DIR := $(LOCAL_DROIDDOC_TEMPLATE_DIR)/$(LOCAL_DROIDDOC_ASSET_DIR)
$(full_target): PRIVATE_IN_CUSTOM_ASSET_DIR := $(LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR)/$(LOCAL_DROIDDOC_CUSTOM_ASSET_DIR)
$(full_target): PRIVATE_OUT_ASSET_DIR := $(out_dir)/$(LOCAL_DROIDDOC_ASSET_DIR)
$(full_target): PRIVATE_OUT_CUSTOM_ASSET_DIR := $(out_dir)/$(LOCAL_DROIDDOC_CUSTOM_ASSET_DIR)
ifneq ($(strip $(LOCAL_DROIDDOC_HTML_DIR)),)
$(full_target): PRIVATE_DROIDDOC_HTML_DIR := -htmldir $(LOCAL_PATH)/$(LOCAL_DROIDDOC_HTML_DIR)
else
$(full_target): PRIVATE_DROIDDOC_HTML_DIR :=
endif
# TODO: not clear if this is used any more
$(full_target): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
html_dir_files := $(shell find $(LOCAL_PATH)/$(LOCAL_DROIDDOC_HTML_DIR) -type f)
$(full_target): $(full_src_files) $(droiddoc_templates) $(droiddoc) $(html_dir_files) $(full_java_lib_deps)
@echo Docs droiddoc: $(PRIVATE_OUT_DIR)
$(hide) mkdir -p $(dir $(full_target))
$(call prepare-doc-source-list,$(PRIVATE_SRC_LIST_FILE),$(PRIVATE_JAVA_FILES), \
$(PRIVATE_SOURCE_INTERMEDIATES_DIR) $(PRIVATE_ADDITIONAL_JAVA_DIR))
$(hide) ( \
LD_LIBRARY_PATH=$(HOST_OUT_SHARED_LIBRARIES) \
javadoc \
\@$(PRIVATE_SRC_LIST_FILE) \
-J-Xmx768m \
-J-Djava.library.path=$(HOST_OUT_SHARED_LIBRARIES) \
$(PRIVATE_PROFILING_OPTIONS) \
-quiet \
-doclet DroidDoc \
-docletpath $(PRIVATE_DOCLETPATH) \
-templatedir $(PRIVATE_CUSTOM_TEMPLATE_DIR) \
-templatedir $(PRIVATE_TEMPLATE_DIR) \
$(PRIVATE_DROIDDOC_HTML_DIR) \
$(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
-sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \
-d $(PRIVATE_OUT_DIR) \
$(PRIVATE_CURRENT_BUILD) $(PRIVATE_CURRENT_TIME) \
$(PRIVATE_DROIDDOC_OPTIONS) \
&& rm -rf $(PRIVATE_OUT_ASSET_DIR) \
&& rm -rf $(PRIVATE_OUT_CUSTOM_ASSET_DIR) \
&& mkdir -p $(PRIVATE_OUT_ASSET_DIR) \
&& mkdir -p $(PRIVATE_OUT_CUSTOM_ASSET_DIR) \
&& cp -fr $(PRIVATE_IN_ASSET_DIR)/* $(PRIVATE_OUT_ASSET_DIR)/ \
&& cp -fr $(PRIVATE_IN_CUSTOM_ASSET_DIR)/* $(PRIVATE_OUT_CUSTOM_ASSET_DIR)/ \
&& touch -f $@ \
) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
else
##
##
## standard doclet only
##
##
$(full_target): $(full_src_files) $(full_java_lib_deps)
@echo Docs javadoc: $(PRIVATE_OUT_DIR)
@mkdir -p $(dir $(full_target))
$(call prepare-doc-source-list,$(PRIVATE_SRC_LIST_FILE),$(PRIVATE_JAVA_FILES), \
$(PRIVATE_SOURCE_INTERMEDIATES_DIR) $(PRIVATE_ADDITIONAL_JAVA_DIR))
$(hide) ( \
javadoc \
\@$(PRIVATE_SRC_LIST_FILE) \
-J-Xmx768m \
$(PRIVATE_PROFILING_OPTIONS) \
$(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
-sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \
-d $(PRIVATE_OUT_DIR) \
-quiet \
&& touch -f $@ \
) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
endif
Basically it make use of the standard doclet instead of android's doclet