Group: Hardware/History/Howto have a free android sdk

From LibrePlanet
Jump to: navigation, search
(Documentation on howto compile it)
m (GNUtoo moved page Group:Hardware/Howto have a free android sdk to Group:Hardware/History/Howto have a free android sdk: Please keep the page: it's important for historical reasons as it documents the creation of Replicant)
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 +
==Update==
 +
aaronw in #libreplanet found that: http://code.google.com/p/android/issues/detail?id=1261
 +
 
==Rationale==
 
==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
 
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
Line 53: Line 56:
 
  +    sun/util/resources/OpenListResourceBundle.java \
 
  +    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)
 
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
  
 
==How to use it==
 
==How to use it==
 +
 +
[[Category:Hardware]]
 +
[[Category:Android]]

Latest revision as of 22:13, 12 October 2019

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

How to use it