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

From LibrePlanet
Jump to: navigation, search
(Created page with '==Documentation on howto compile it== ==How to use 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)
 
(14 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==
 +
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==
 
==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==
 
==How to use it==
 +
 +
[[Category:Hardware]]
 +
[[Category:Android]]

Latest revision as of 21: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