ganerate an application for android in standalone mode

This commit is contained in:
Edouard Dupin 2012-09-10 16:46:02 +02:00
parent c3c6b35076
commit b41ea306c2

View File

@ -13,116 +13,167 @@ TARGET_GLOBAL_LDLIBS_SHARED = --sysroot=$(PROJECT_NDK)/platforms/android-$(ANDRO
#generic makefile
include $(EWOL_FOLDER)/Build/core/main.mk
#FINAL_FOLDER_ANT=$(TARGET_OUT_FINAL)/ant
#FINAL_FOLDER_JAVA_PROJECT=$(FINAL_FOLDER_ANT)/src/com/$(PROJECT_VENDOR)/$(PROJECT_NAME)
#FINAL_FOLDER_JAVA_EWOL=$(FINAL_FOLDER_ANT)/src/org/ewol
FINAL_FOLDER_JAVA=$(TARGET_OUT_FINAL)/java
FINAL_FOLDER_JAVA=$(TARGET_OUT_FINAL)
FINAL_FOLDER_JAVA_PROJECT=$(FINAL_FOLDER_JAVA)/src/com/$(PROJECT_VENDOR)/$(PROJECT_NAME)
FINAL_FOLDER_JAVA_EWOL=$(FINAL_FOLDER_JAVA)/src/org/ewol
FINAL_FILE_ABSTRACTION = $(FINAL_FOLDER_JAVA_PROJECT)/$(PROJECT_NAME).java
final :
@rm -rf $(FINAL_FOLDER_JAVA)/
@mkdir -p $(FINAL_FOLDER_JAVA_PROJECT)/
@mkdir -p $(FINAL_FOLDER_JAVA_EWOL)/
@cp $(EWOL_FOLDER)/Java/PROJECT_NAME.java $(FINAL_FILE_ABSTRACTION)
@sed -i "s|__PROJECT_VENDOR__|$(PROJECT_VENDOR)|" $(FINAL_FILE_ABSTRACTION)
@sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME)|" $(FINAL_FILE_ABSTRACTION)
@sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_PACKAGE)|" $(FINAL_FILE_ABSTRACTION)
@# copy the Ewol java files :
@cp $(EWOL_FOLDER)/Java/interfaceJNI.java $(FINAL_FOLDER_JAVA_EWOL)/
@cp $(EWOL_FOLDER)/Java/interfaceOpenGL.java $(FINAL_FOLDER_JAVA_EWOL)/
@cp $(EWOL_FOLDER)/Java/interfaceSurfaceView.java $(FINAL_FOLDER_JAVA_EWOL)/
@cp $(EWOL_FOLDER)/Java/interfaceAudio.java $(FINAL_FOLDER_JAVA_EWOL)/
@#Rmove the R.java file as will be created by aapt
@#rm -rf $(FINAL_FOLDER_JAVA)/src/com/simple/search/R.java
@# copy android specific data :
@echo "AndroidManifest.xml <== os-Android/AndroidManifest.xml"
@cp os-Android/AndroidManifest.xml $(FINAL_FOLDER_JAVA)/
@cp -r os-Android/res $(FINAL_FOLDER_JAVA)/res
@# copy user data
@mkdir -p $(FINAL_FOLDER_JAVA)/assets/
@# remove this when move in the EWOL lib ...
@cp -r $(EWOL_FOLDER)/share/* $(FINAL_FOLDER_JAVA)/assets/
@#copy use data
@cp -r share/* $(FINAL_FOLDER_JAVA)/assets/
@mkdir -p $(FINAL_FOLDER_JAVA)/libs/armeabi/
@# note : this change the lib name ...
@cp $(TARGET_OUT_STAGING)/usr/lib/$(PROJECT_PACKAGE).so $(FINAL_FOLDER_JAVA)/libs/armeabi/lib$(PROJECT_PACKAGE).so
@echo " (...) "
mkdir -p $(FINAL_FOLDER_JAVA)/gen
@echo "out <== Create the R.java and resource file"
@#-v to have information ...
@aapt p -f \
@echo ".apk/assets/ <== assets"
@mkdir -p $(FINAL_FOLDER_JAVA)/data/assets/
@cp -r $(EWOL_FOLDER)/share/* $(FINAL_FOLDER_JAVA)/data/assets/
@cp -r share/* $(FINAL_FOLDER_JAVA)/data/assets/
@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
@# 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/
@echo "R.java <== Resources files"
@$(PROJECT_SDK)/platform-tools/aapt p -f \
-M $(FINAL_FOLDER_JAVA)/AndroidManifest.xml \
-F $(FINAL_FOLDER_JAVA)/resources.res \
-I $(PROJECT_SDK)/platforms/android-15/android.jar\
-S $(FINAL_FOLDER_JAVA)/res/ \
-J $(FINAL_FOLDER_JAVA)/gen
-J $(FINAL_FOLDER_JAVA)/src
@mkdir -p $(FINAL_FOLDER_JAVA)/libs/
@mkdir -p $(FINAL_FOLDER_JAVA)/build/classes/
@echo "java <== input"
@#Now compile - note the use of a seperate lib (in non-dex format!)
@#CLASSPATH=$(PROJECT_SDK)/sources/android-15/java
@#PATH=$(PROJECT_SDK)/tools/:$(PROJECT_SDK)/platform-tools/:$(PATH)
@#JAVA_HOME=$(PROJECT_SDK)/sources/android-15/java
@echo ".class <== .java"
@# more information with : -Xlint
@# more more information : -verbose
@javac \
-d $(FINAL_FOLDER_JAVA)/build/classes \
-classpath $(PROJECT_SDK)/platforms/android-15/android.jar \
$(FINAL_FILE_ABSTRACTION) \
$(FINAL_FOLDER_JAVA_EWOL)/interfaceJNI.java \
$(FINAL_FOLDER_JAVA_EWOL)/interfaceOpenGL.java \
$(FINAL_FOLDER_JAVA_EWOL)/interfaceSurfaceView.java \
$(FINAL_FOLDER_JAVA_EWOL)/interfaceAudio.java \
$(FINAL_FOLDER_JAVA)/gen/R.java
$(EWOL_FOLDER)/Java/src/org/ewol/interfaceJNI.java \
$(EWOL_FOLDER)/Java/src/org/ewol/interfaceOpenGL.java \
$(EWOL_FOLDER)/Java/src/org/ewol/interfaceSurfaceView.java \
$(EWOL_FOLDER)/Java/src/org/ewol/interfaceAudio.java \
$(FINAL_FOLDER_JAVA)/src/R.java
@echo "dex <== input classes : "
@echo ".dex <== .class"
@$(PROJECT_SDK)/platform-tools/dx \
--dex --verbose --no-strict \
--output=$(FINAL_FOLDER_JAVA)/build/out.dex \
--dex --no-strict \
--output=$(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE).dex \
$(FINAL_FOLDER_JAVA)/build/classes/
@echo "apk <== dex file"
@echo ".apk <== .dex, assets, .so, res"
@$(PROJECT_SDK)/tools/apkbuilder \
$(FINAL_FOLDER_JAVA)/out.apk \
-v -u \
$(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE)-unalligned.apk \
-u \
-z $(FINAL_FOLDER_JAVA)/resources.res \
-f $(FINAL_FOLDER_JAVA)/build/out.dex
-f $(FINAL_FOLDER_JAVA)/build/$(PROJECT_PACKAGE).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)" ; \
keytool -genkeypair -v \
-keystore ./$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).jks \
-storepass Pass$(PROJECT_NAME) \
-alias alias$(PROJECT_NAME) \
-keypass PassK$(PROJECT_NAME) \
-keyalg RSA \
-validity 365 \
)
@# Question poser a ce moment, les automatiser ...
@# Quels sont vos prénom et nom ?
@# Edouard DUPIN
@# [Unknown] : Quel est le nom de votre unité organisationnelle ?
@# org
@# [Unknown] : Quelle est le nom de votre organisation ?
@# EWOL
@# [Unknown] : Quel est le nom de votre ville de résidence ?
@# Paris
@# [Unknown] : Quel est le nom de votre état ou province ?
@# France
@# [Unknown] : Quel est le code de pays à deux lettres pour cette unité ?
@# FR
@# [Unknown] : Est-ce CN=Edouard DUPIN, OU=org, O=EWOL, L=Paris, ST=France, C=FR ?
@# oui
@# [non] :
@# Génération d'une paire de clés RSA de 1 024 bits et d'un certificat autosigné (SHA1withRSA) d'une validité de 365 jours
@# pour : CN=Edouard DUPIN, OU=org, O=EWOL, L=Paris, ST=France, C=FR
@# keytool is situated in $(JAVA_HOME)/bin ...
@echo "apk(Signed) <== apk"
@#$(PROJECT_SDK)/tools/signer $(FINAL_FOLDER_JAVA)/out.apk $(FINAL_FOLDER_JAVA)/outSigned.apk
@#jarsigner $(FINAL_FOLDER_JAVA)/out.apk $(TARGET_OUT_FINAL)/$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).apk
plop:
@# 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 $(TARGET_OUT_FINAL)/$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).apk
@#generate the pass file :
@echo "Pass$(PROJECT_NAME)" > tmpPass.boo
@echo "PassK$(PROJECT_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) \
< 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
install: final
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
install:
@echo ------------------------------------------------------------------------
@echo Install : $(TARGET_OUT_FINAL)/$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).apk
@echo ------------------------------------------------------------------------
@# $(PROJECT_SDK)/platform-tools/adb kill-server
@# install application
sudo $(PROJECT_SDK)/platform-tools/adb install -r $(TARGET_OUT_FINAL)/$(PROJECT_NAME)-$(BUILD_DIRECTORY_MODE).apk
sudo $(PROJECT_SDK)/platform-tools/adb install -r $(FINAL_FOLDER_JAVA)/$(PROJECT_PACKAGE)-$(BUILD_DIRECTORY_MODE).apk
uninstall:
@echo ------------------------------------------------------------------------