Generate all needed file for android code generation

This commit is contained in:
Edouard Dupin 2012-09-12 18:17:54 +02:00
parent 9599512395
commit 8724f80245
2 changed files with 77 additions and 84 deletions

View File

@ -1,7 +1,5 @@
PROJECT_PACKAGE=$(PROJECT_NAME)package
TARGET_OS = Android
TARGET_ARCH = ARM
TARGET_CROSS = $(PROJECT_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
@ -13,55 +11,69 @@ TARGET_GLOBAL_LDLIBS_SHARED = --sysroot=$(PROJECT_NDK)/platforms/android-$(ANDRO
#generic makefile
include $(EWOL_FOLDER)/Build/core/main.mk
FINAL_FOLDER_JAVA=$(TARGET_OUT_FINAL)
FINAL_FOLDER_JAVA_PROJECT=$(FINAL_FOLDER_JAVA)/src/$(CONFIG___EWOL_APPL_ORGANISATION_TYPE__)/$(PROJECT_VENDOR)/$(PROJECT_NAME)
CONFIG2___EWOL_APPL_ORGANISATION_TYPE__ := $(call convert-special-char,$(CONFIG___EWOL_APPL_ORGANISATION_TYPE__))
FINAL_FILE_ABSTRACTION = $(FINAL_FOLDER_JAVA_PROJECT)/$(PROJECT_NAME).java
CONFIG2___EWOL_APPL_COMPAGNY__ := $(call convert-special-char,$(CONFIG___EWOL_APPL_COMPAGNY__))
CONFIG2___EWOL_APPL_NAME__ := $(call convert-special-char,$(CONFIG___EWOL_APPL_NAME__))
CONFIG2___EWOL_ANDROID_ICON__ := $(subst $(quote),$(empty),$(CONFIG___EWOL_ANDROID_ICON__))
FINAL_FOLDER_JAVA=$(TARGET_OUT_FINAL)
FINAL_FOLDER_JAVA_PROJECT=$(FINAL_FOLDER_JAVA)/src/$(CONFIG2___EWOL_APPL_ORGANISATION_TYPE__)/$(CONFIG2___EWOL_APPL_COMPAGNY__)/$(CONFIG2___EWOL_APPL_NAME__)
FINAL_FILE_ABSTRACTION = $(FINAL_FOLDER_JAVA_PROJECT)/$(CONFIG2___EWOL_APPL_NAME__).java
javaclean:
@rm -rf $(FINAL_FOLDER_JAVA)/
rm -rf $(FINAL_FOLDER_JAVA)/
@mkdir -p $(FINAL_FOLDER_JAVA_PROJECT)/
$(FINAL_FILE_ABSTRACTION) : $(EWOL_FOLDER)/Java/PROJECT_NAME.java $(CONFIG_GLOBAL_FILE)
@mkdir -p $(dir $@)
@cp $(EWOL_FOLDER)/Java/PROJECT_NAME.java $@
@sed -i "s|__PROJECT_ORG_TYPE__|$(CONFIG___EWOL_APPL_ORGANISATION_TYPE__)|" $@
@sed -i "s|__PROJECT_VENDOR__|$(PROJECT_VENDOR)|" $@
@sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME)|" $@
@sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_PACKAGE)|" $@
#ifeq ("$(CONFIG___VIDEO__OPENGL_ES_2)","y")
@sed -i "s|__PROJECT_ORG_TYPE__|$(CONFIG2___EWOL_APPL_ORGANISATION_TYPE__)|" $@
@sed -i "s|__PROJECT_VENDOR__|$(CONFIG2___EWOL_APPL_COMPAGNY__)|" $@
@sed -i "s|__PROJECT_NAME__|$(CONFIG2___EWOL_APPL_NAME__)|" $@
@sed -i "s|__PROJECT_PACKAGE__|$(CONFIG2___EWOL_APPL_NAME__)|" $(EWOL_TMP_PATH)/$@
ifeq ("$(CONFIG___VIDEO__OPENGL_ES_2)","y")
@sed -i "s|__CONF_OGL_ES_V__|2|" $@
#else
#@sed -i "s|__CONF_OGL_ES_V__|1|" $@
#endif
else
@sed -i "s|__CONF_OGL_ES_V__|1|" $@
endif
APPL_VERSION:=$(shell git describe --tags)
# --abbrev=0)
$(FINAL_FOLDER_JAVA)/AndroidManifest.xml : $(CONFIG_GLOBAL_FILE)
@echo "AndroidManifest.xml <== configFile"
@echo "<?xml version=\"1.0\" encoding=\"utf-8\"?> " > $@
@echo "<!-- Manifest is autoGenerated with Ewol ... do not patch it-->" >> $@
@echo "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" " >> $@
# TODO ...
@echo " package=\"$(CONFIG___EWOL_APPL_ORGANISATION_TYPE__).$(PROJECT_VENDOR).$(PROJECT_NAME)\" " >> $@
# TODO ...
@echo " package=\"$(CONFIG2___EWOL_APPL_ORGANISATION_TYPE__).$(CONFIG2___EWOL_APPL_COMPAGNY__).$(CONFIG2___EWOL_APPL_NAME__)\" " >> $@
@echo " android:versionCode=\"1\" " >> $@
# TODO ...
@echo " android:versionName=\"1.0\"> " >> $@
@echo " android:versionName=\"$(APPL_VERSION)\"> " >> $@
ifeq ("$(CONFIG___VIDEO__OPENGL_ES_2)","y")
@echo " <!-- Use openGl ES 2 --> " >> $@
@echo " <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" ></uses-feature> " >> $@
@echo " <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />" >> $@
endif
@echo " <!-- This is the platform API where NativeActivity was introduced. --> " >> $@
@echo " <uses-sdk android:minSdkVersion=\"$(CONFIG___EWOL_ANDROID_MINIMUM_SDK_VERSION__)\" /> " >> $@
@echo " " >> $@
# TODO ...
@echo " <application android:label=\"$(CONFIG___EWOL_APPL_NAME__)\" " >> $@
@echo " android:icon=\"@$(CONFIG___EWOL_ANDROID_ICON__)\"> " >> $@
# TODO ...
@echo " <activity android:name=\".$(PROJECT_NAME)\" " >> $@
# TODO ...
ifneq ("$(wildcard ./$(CONFIG2___EWOL_ANDROID_ICON__).png)","")
@mkdir -p $(FINAL_FOLDER_JAVA)/res/drawable/
@cp ./$(CONFIG2___EWOL_ANDROID_ICON__).png $(FINAL_FOLDER_JAVA)/res/drawable/icon.png
@echo " android:icon=\"@drawable/icon\" " >> $@
endif
@echo " > " >> $@
@echo " <activity android:name=\".$(CONFIG2___EWOL_APPL_NAME__)\" " >> $@
@echo " android:label=\"$(CONFIG___EWOL_APPL_BASIC_TITLE__)\" " >> $@
@echo " android:icon=\"@$(CONFIG___EWOL_ANDROID_ICON__)\" " >> $@
ifneq ("$(wildcard ./$(CONFIG2___EWOL_ANDROID_ICON__).png)","")
@echo " android:icon=\"@drawable/icon\" " >> $@
endif
@echo " android:configChanges=\"orientation\"> " >> $@
@echo " <intent-filter> " >> $@
@echo " <action android:name=\"android.intent.action.MAIN\" /> " >> $@
@ -111,10 +123,7 @@ endif
@echo "</manifest> " >> $@
final : javaclean $(FINAL_FILE_ABSTRACTION) $(FINAL_FOLDER_JAVA)/AndroidManifest.xml
@#echo "AndroidManifest.xml <== os-Android/AndroidManifest.xml"
@#cp os-Android/AndroidManifest.xml $(FINAL_FOLDER_JAVA)/
@cp -r os-Android/res $(FINAL_FOLDER_JAVA)/res
@mkdir -p $(FINAL_FOLDER_JAVA)/res/
@echo ".apk/assets/ <== assets"
@mkdir -p $(FINAL_FOLDER_JAVA)/data/assets/
@ -123,7 +132,7 @@ final : javaclean $(FINAL_FILE_ABSTRACTION) $(FINAL_FOLDER_JAVA)/AndroidManifest
@echo ".apk/lib/armeabi/ <== *.so"
@mkdir -p $(FINAL_FOLDER_JAVA)/data/lib/armeabi/
@cp $(TARGET_OUT_STAGING)/usr/lib/$(PROJECT_PACKAGE).so $(FINAL_FOLDER_JAVA)/data/lib/armeabi/lib$(PROJECT_PACKAGE).so
@cp $(TARGET_OUT_STAGING)/usr/lib/$(CONFIG2___EWOL_APPL_NAME__).so $(FINAL_FOLDER_JAVA)/data/lib/armeabi/lib$(CONFIG2___EWOL_APPL_NAME__).so
@# Doc :
@# http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/
@ -152,28 +161,28 @@ final : javaclean $(FINAL_FILE_ABSTRACTION) $(FINAL_FOLDER_JAVA)/AndroidManifest
@echo ".dex <== .class"
@$(PROJECT_SDK)/platform-tools/dx \
--dex --no-strict \
--output=$(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE).dex \
--output=$(FINAL_FOLDER_JAVA)/build/$(CONFIG2___EWOL_APPL_NAME__).dex \
$(FINAL_FOLDER_JAVA)/build/classes/
@echo ".apk <== .dex, assets, .so, res"
@$(PROJECT_SDK)/tools/apkbuilder \
$(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE)-unalligned.apk \
$(FINAL_FOLDER_JAVA)/build/$(CONFIG2___EWOL_APPL_NAME__)-unalligned.apk \
-u \
-z $(FINAL_FOLDER_JAVA)/resources.res \
-f $(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE).dex \
-f $(FINAL_FOLDER_JAVA)/build/$(CONFIG2___EWOL_APPL_NAME__).dex \
-rf $(FINAL_FOLDER_JAVA)/data
@# doc :
@# http://developer.android.com/tools/publishing/app-signing.html
@# keytool is situated in $(JAVA_HOME)/bin ...
$(if $(wildcard ./$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).jks),$(empty), \
@echo "./$(PROJECT_NAME).jks <== dynamic key (NOTE : It might ask some question to generate the key for android)" ; \
$(if $(wildcard ./$(CONFIG2___EWOL_APPL_NAME__)-$(BUILD_DIRECTORY_MODE).jks),$(empty), \
@echo "./$(CONFIG2___EWOL_APPL_NAME__).jks <== dynamic key (NOTE : It might ask some question to generate the key for android)" ; \
keytool -genkeypair -v \
-keystore ./$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).jks \
-storepass Pass$(PROJECT_NAME) \
-alias alias$(PROJECT_NAME) \
-keypass PassK$(PROJECT_NAME) \
-keystore ./$(CONFIG2___EWOL_APPL_NAME__)-$(BUILD_DIRECTORY_MODE).jks \
-storepass Pass$(CONFIG2___EWOL_APPL_NAME__) \
-alias alias$(CONFIG2___EWOL_APPL_NAME__) \
-keypass PassK$(CONFIG2___EWOL_APPL_NAME__) \
-keyalg RSA \
-validity 365 \
)
@ -200,69 +209,35 @@ final : javaclean $(FINAL_FILE_ABSTRACTION) $(FINAL_FOLDER_JAVA)/AndroidManifest
@# keytool is situated in $(JAVA_HOME)/bin ...
@echo "apk(Signed) <== apk"
@#generate the pass file :
@echo "Pass$(PROJECT_NAME)" > tmpPass.boo
@echo "PassK$(PROJECT_NAME)" >> tmpPass.boo
@echo "Pass$(CONFIG2___EWOL_APPL_NAME__)" > tmpPass.boo
@echo "PassK$(CONFIG2___EWOL_APPL_NAME__)" >> tmpPass.boo
@# verbose mode : -verbose
@jarsigner \
-sigalg MD5withRSA \
-digestalg SHA1 \
-keystore ./$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).jks \
$(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE)-unalligned.apk \
alias$(PROJECT_NAME) \
-keystore ./$(CONFIG2___EWOL_APPL_NAME__)-$(BUILD_DIRECTORY_MODE).jks \
$(FINAL_FOLDER_JAVA)/build/$(CONFIG2___EWOL_APPL_NAME__)-unalligned.apk \
alias$(CONFIG2___EWOL_APPL_NAME__) \
< tmpPass.boo
@rm tmpPass.boo
@echo "apk(aligned) <== apk"
@# verbose mode : -v
@zipalign 4 \
$(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE)-unalligned.apk \
$(FINAL_FOLDER_JAVA)/$(PROJECT_PACKAGE).apk
FINAL_FOLDER_ANT=$(TARGET_OUT_FINAL)/ant
FINAL_FOLDER_ANT_PROJECT=$(FINAL_FOLDER_ANT)/src/com/$(PROJECT_VENDOR)/$(PROJECT_NAME)
FINAL_FILE_ANT_ABSTRACTION = $(FINAL_FOLDER_JAVA_PROJECT)/$(PROJECT_NAME).java
with_ant:
@mkdir -p $(FINAL_FOLDER_ANT_PROJECT)/
@cp $(EWOL_FOLDER)/Java/PROJECT_NAME.java $(FINAL_FILE_ANT_ABSTRACTION)
@sed -i "s|__PROJECT_VENDOR__|$(PROJECT_VENDOR)|" $(FINAL_FILE_ANT_ABSTRACTION)
@sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME)|" $(FINAL_FILE_ANT_ABSTRACTION)
@sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_PACKAGE)|" $(FINAL_FILE_ANT_ABSTRACTION)
@# copy the Ewol java files :
@mkdir -p $(FINAL_FOLDER_ANT)/src/org/ewol
@cp $(EWOL_FOLDER)/Java/src/org/ewol/interfaceJNI.java $(FINAL_FOLDER_ANT)/src/org/ewol
@cp $(EWOL_FOLDER)/Java/src/org/ewol/interfaceOpenGL.java $(FINAL_FOLDER_ANT)/src/org/ewol/
@cp $(EWOL_FOLDER)/Java/src/org/ewol/interfaceSurfaceView.java $(FINAL_FOLDER_ANT)/src/org/ewol/
@cp $(EWOL_FOLDER)/Java/src/org/ewol/interfaceAudio.java $(FINAL_FOLDER_ANT)/src/org/ewol/
@# copy android specific data :
@cp -r os-Android/* $(FINAL_FOLDER_ANT)/
@# copy user data
@mkdir -p $(FINAL_FOLDER_ANT)/assets/
@cp -r share/* $(FINAL_FOLDER_ANT)/assets/
@mkdir -p $(FINAL_FOLDER_ANT)/libs/armeabi/
@# note : this change the lib name ...
@cp $(TARGET_OUT_STAGING)/usr/lib/$(PROJECT_PACKAGE).so $(FINAL_FOLDER_ANT)/libs/armeabi/lib$(PROJECT_PACKAGE).so
@echo " (ant) build java code"
@cd $(FINAL_FOLDER_ANT) ; PATH=$(PROJECT_SDK)/tools/:$(PROJECT_SDK)/platform-tools/:$(PATH) ant -Dsdk.dir=$(PROJECT_SDK) $(BUILD_DIRECTORY_MODE)
@# cp the release package in the final folder to facilitate the find
@cp -f $(FINAL_FOLDER_ANT)/bin/$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).apk $(FINAL_FOLDER_JAVA)/$(PROJECT_PACKAGE).apk
$(FINAL_FOLDER_JAVA)/build/$(CONFIG2___EWOL_APPL_NAME__)-unalligned.apk \
$(FINAL_FOLDER_JAVA)/$(CONFIG2___EWOL_APPL_NAME__).apk
install:
@echo ------------------------------------------------------------------------
@echo Install : $(TARGET_OUT_FINAL)/$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).apk
@echo Install : $(TARGET_OUT_FINAL)/$(CONFIG2___EWOL_APPL_NAME__).apk
@echo ------------------------------------------------------------------------
@# $(PROJECT_SDK)/platform-tools/adb kill-server
@# install application
sudo $(PROJECT_SDK)/platform-tools/adb install -r $(FINAL_FOLDER_JAVA)/$(PROJECT_PACKAGE).apk
sudo $(PROJECT_SDK)/platform-tools/adb install -r $(FINAL_FOLDER_JAVA)/$(CONFIG2___EWOL_APPL_NAME__).apk
uninstall:
@echo ------------------------------------------------------------------------
@echo UnInstall : $(ANDROID_BASIC_FOLDER)bin/$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).apk
@echo UnInstall : $(ANDROID_BASIC_FOLDER)bin/$(CONFIG2___EWOL_APPL_NAME__).apk
@echo ------------------------------------------------------------------------
@echo ... TODO ...

View File

@ -10,6 +10,12 @@
###############################################################################
## Some useful macros.
###############################################################################
quote := "
#"
simplequote := '
#'
coma := ,
empty :=
space := $(empty) $(empty)
space4 := $(space)$(space)$(space)$(space)
@ -50,6 +56,18 @@ locase = $(shell echo $1 | tr [:upper:] [:lower:])
# $1 : text to convert.
get-define = $(strip $(call upcase,$(call tr,$1,-,_)))
# remove many special char of a string ...
# Replace '-' by '_'
# Replace ' ' by '_'
# Replace '"' by ''
# Replace ''' by ''
# $1 : text to convert.
convert-special-char = $(call locase,\
$(subst $(quote),$(empty),\
$(subst $(simplequote),$(empty),\
$(subst -,_,\
$(subst $(space),_,$1)))))
# Remove quotes from string
remove-quotes = $(strip $(subst ",,$1))
#"