270 lines
12 KiB
Makefile
270 lines
12 KiB
Makefile
###############################################################################
|
||
## @author Edouard DUPIN
|
||
## @date 17-08-2012
|
||
## @project standard Build system
|
||
## @copyright BSDv3
|
||
###############################################################################
|
||
|
||
# Define SDK and NDK folder for Android compilation tools and packager tools :
|
||
ifndef PROJECT_NDK
|
||
PROJECT_NDK:=$(call fullpath,$(PROJECT_PATH)/../android/ndk/)
|
||
$(info Auto define android NDK project to : $(PROJECT_NDK))
|
||
endif
|
||
ifndef PROJECT_SDK
|
||
PROJECT_SDK:=$(call fullpath,$(PROJECT_PATH)/../android/sdk/)
|
||
$(info Auto define Android SDK project to : $(PROJECT_SDK))
|
||
endif
|
||
|
||
#TARGET_ARCH := ARM
|
||
TARGET_ARCH := ARMv7
|
||
TARGET_CROSS := $(PROJECT_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
|
||
TARGET_CROSS_CLANG := $(PROJECT_NDK)/toolchains/llvm-3.1/prebuilt/linux-x86/bin/
|
||
|
||
|
||
#local get the gcc version :
|
||
|
||
TMPP_CC_VERSION := $(shell $(TARGET_CROSS)gcc --version | head -1 | sed "s/.*\([0-9]\.[0-9]\.[0-9]\).*/\1/")
|
||
ANDROID_BOARD_ID = 14
|
||
TARGET_GLOBAL_C_INCLUDES+=-I$(PROJECT_NDK)/platforms/android-$(ANDROID_BOARD_ID)/arch-arm/usr/include
|
||
TARGET_GLOBAL_C_INCLUDES+=-I$(PROJECT_NDK)/sources/cxx-stl/system/include/
|
||
|
||
TARGET_GLOBAL_LDLIBS_SHARED = --sysroot=$(PROJECT_NDK)/platforms/android-$(ANDROID_BOARD_ID)/arch-arm
|
||
|
||
#generic makefile
|
||
include $(BUILD_SYSTEM)/main.mk
|
||
|
||
FINAL_FOLDER_JAVA_PROJECT=$(TARGET_OUT_STAGING)/src/$(PROJECT_COMPAGNY_TYPE)/$(PROJECT_COMPAGNY_NAME2)/$(PROJECT_NAME2)
|
||
|
||
FINAL_FILE_ABSTRACTION = $(FINAL_FOLDER_JAVA_PROJECT)/$(PROJECT_NAME2).java
|
||
|
||
|
||
$(FINAL_FILE_ABSTRACTION) : $(EWOL_FOLDER)/sources/android/PROJECT_NAME.java $(CONFIG_GLOBAL_FILE)
|
||
$(Q)mkdir -p $(dir $@)
|
||
$(Q)cp $(EWOL_FOLDER)/sources/android/PROJECT_NAME.java $@
|
||
$(Q)sed -i "s|__PROJECT_ORG_TYPE__|$(PROJECT_COMPAGNY_TYPE)|" $@
|
||
$(Q)sed -i "s|__PROJECT_VENDOR__|$(PROJECT_COMPAGNY_NAME2)|" $@
|
||
$(Q)sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME2)|" $@
|
||
$(Q)sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_NAME2)|" $@
|
||
$(Q)sed -i "s|__CONF_OGL_ES_V__|2|" $@
|
||
|
||
APPL_VERSION:=$(shell git describe --tags)
|
||
# --abbrev=0)
|
||
|
||
$(eval $(call copy-one-file,$(PROJECT_ICON),$(TARGET_OUT_STAGING)/res/drawable/icon.png))
|
||
|
||
|
||
$(TARGET_OUT_STAGING)/AndroidManifest.xml : $(CONFIG_GLOBAL_FILE) $(TARGET_OUT_STAGING)/res/drawable/icon.png
|
||
@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\" " >> $@
|
||
@echo " package=\"$(PROJECT_COMPAGNY_TYPE).$(PROJECT_COMPAGNY_NAME2).$(PROJECT_NAME2)\" " >> $@
|
||
@echo " android:versionCode=\"1\" " >> $@
|
||
@echo " android:versionName=\"$(APPL_VERSION)\"> " >> $@
|
||
@echo " <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />" >> $@
|
||
@echo " <uses-sdk android:minSdkVersion=\"$(CONFIG___EWOL_ANDROID_MINIMUM_SDK_VERSION__)\" /> " >> $@
|
||
@echo " " >> $@
|
||
@echo " <application android:label=\"$(PROJECT_NAME)\" " >> $@
|
||
@echo " android:icon=\"@drawable/icon\" " >> $@
|
||
@echo " > " >> $@
|
||
@echo " <activity android:name=\".$(PROJECT_NAME2)\" " >> $@
|
||
ifeq ("$(DEBUG)","1")
|
||
@echo " android:label=\"$(CONFIG___EWOL_APPL_BASIC_TITLE__)-debug\" " >> $@
|
||
else
|
||
@echo " android:label=\"$(CONFIG___EWOL_APPL_BASIC_TITLE__)\" " >> $@
|
||
endif
|
||
@echo " android:icon=\"@drawable/icon\" " >> $@
|
||
@echo " android:hardwareAccelerated=\"true\" " >> $@
|
||
@echo " android:configChanges=\"orientation\"> " >> $@
|
||
@echo " <intent-filter> " >> $@
|
||
@echo " <action android:name=\"android.intent.action.MAIN\" /> " >> $@
|
||
@echo " <category android:name=\"android.intent.category.LAUNCHER\" /> " >> $@
|
||
@echo " </intent-filter> " >> $@
|
||
@echo " </activity> " >> $@
|
||
@echo " </application> " >> $@
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__WRITE_EXTERNAL_STORAGE__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__CAMERA__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.CAMERA\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__INTERNET__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.INTERNET\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__MODIFY_AUDIO_SETTINGS__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__READ_CALENDAR__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.READ_CALENDAR\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__READ_CONTACTS__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.READ_CONTACTS\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__READ_FRAME_BUFFER__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.READ_FRAME_BUFFER\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__READ_PROFILE__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.READ_PROFILE\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__RECORD_AUDIO__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.RECORD_AUDIO\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__SET_ORIENTATION__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.SET_ORIENTATION\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__VIBRATE__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.VIBRATE\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__ACCESS_COARSE_LOCATION__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /> " >> $@
|
||
endif
|
||
ifeq ("$(CONFIG___ANDROID_PERMISSION__ACCESS_FINE_LOCATION__)","y")
|
||
@echo " <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /> " >> $@
|
||
endif
|
||
@echo "</manifest> " >> $@
|
||
|
||
|
||
javaclean:
|
||
$(Q)mkdir -p $(FINAL_FOLDER_JAVA_PROJECT)/
|
||
|
||
|
||
|
||
final : javaclean $(FINAL_FILE_ABSTRACTION) $(TARGET_OUT_STAGING)/AndroidManifest.xml
|
||
$(Q)mkdir -p $(TARGET_OUT_STAGING)/res/
|
||
$(Q)mkdir -p $(TARGET_OUT_STAGING)/src/
|
||
@# 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"
|
||
$(Q)$(PROJECT_SDK)/platform-tools/aapt p -f \
|
||
-M $(TARGET_OUT_STAGING)/AndroidManifest.xml \
|
||
-F $(TARGET_OUT_STAGING)/resources.res \
|
||
-I $(PROJECT_SDK)/platforms/android-15/android.jar\
|
||
-S $(TARGET_OUT_STAGING)/res/ \
|
||
-J $(TARGET_OUT_STAGING)/src
|
||
@#aapt package -f -M ${manifest.file} -F ${packaged.resource.file} -I ${path.to.android-jar.library}
|
||
@# -S ${android-resource-directory} [-m -J ${folder.to.output.the.R.java}]
|
||
|
||
$(Q)mkdir -p $(TARGET_OUT_STAGING)/build/classes/
|
||
@echo ".class <== .java"
|
||
@# more information with : -Xlint
|
||
$(Q)javac \
|
||
-d $(TARGET_OUT_STAGING)/build/classes \
|
||
-classpath $(PROJECT_SDK)/platforms/android-15/android.jar \
|
||
$(FINAL_FILE_ABSTRACTION) \
|
||
$(EWOL_FOLDER)/sources/android/src/org/ewol/interfaceJNI.java \
|
||
$(EWOL_FOLDER)/sources/android/src/org/ewol/interfaceOpenGL.java \
|
||
$(EWOL_FOLDER)/sources/android/src/org/ewol/interfaceSurfaceView.java \
|
||
$(EWOL_FOLDER)/sources/android/src/org/ewol/interfaceAudio.java \
|
||
$(TARGET_OUT_STAGING)/src/R.java
|
||
|
||
@echo ".dex <== .class"
|
||
$(Q)$(PROJECT_SDK)/platform-tools/dx \
|
||
--dex --no-strict \
|
||
--output=$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2).dex \
|
||
$(TARGET_OUT_STAGING)/build/classes/
|
||
|
||
@echo ".apk <== .dex, assets, .so, res"
|
||
$(Q)$(PROJECT_SDK)/tools/apkbuilder \
|
||
$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2)-unalligned.apk \
|
||
-u \
|
||
-z $(TARGET_OUT_STAGING)/resources.res \
|
||
-f $(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2).dex \
|
||
-rf $(TARGET_OUT_STAGING)/data
|
||
|
||
@# doc :
|
||
@# http://developer.android.com/tools/publishing/app-signing.html
|
||
ifeq ("$(DEBUG)","1")
|
||
@# To create the debug Key ==> for all ...
|
||
@#keytool -genkeypair -v -keystore $(BUILD_SYSTEM)/AndroidDebugKey.jks -storepass Pass__AndroidDebugKey -alias alias__AndroidDebugKey -keypass PassKey__AndroidDebugKey -keyalg RSA -validity 36500
|
||
@# use default common generic debug key:
|
||
@# generate the pass file (debug mode does not request to have a complicated key) :
|
||
@echo "Pass__AndroidDebugKey" > tmpPass.boo
|
||
@echo "PassKey__AndroidDebugKey" >> tmpPass.boo
|
||
@# verbose mode : -verbose
|
||
$(Q)jarsigner \
|
||
-keystore $(BUILD_SYSTEM)/AndroidDebugKey.jks \
|
||
$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2)-unalligned.apk \
|
||
alias__AndroidDebugKey \
|
||
< tmpPass.boo \
|
||
2> /dev/null
|
||
$(Q)rm tmpPass.boo
|
||
else
|
||
@# keytool is situated in $(JAVA_HOME)/bin ...
|
||
@#TODO : call the user the pass and the loggin he want ...
|
||
$(if $(wildcard ./config/AndroidKey_$(PROJECT_NAME2).jks),$(empty), \
|
||
$(Q)echo "./config/$(PROJECT_NAME2).jks <== dynamic key (NOTE : It might ask some question to generate the key for android)" ; \
|
||
$(Q)keytool -genkeypair -v \
|
||
-keystore ./config/$(PROJECT_NAME2).jks \
|
||
-alias alias_$(PROJECT_NAME2) \
|
||
-keyalg RSA \
|
||
-validity 365 \
|
||
)
|
||
@# note we can add : -storepass Pass$(PROJECT_NAME2)
|
||
@# note we can add : -keypass PassK$(PROJECT_NAME2)
|
||
|
||
@# 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"
|
||
@# sign the application request loggin and password :
|
||
$(Q)jarsigner \
|
||
-keystore ./config/AndroidKey_$(PROJECT_NAME2).jks \
|
||
$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2)-unalligned.apk \
|
||
alias_$(PROJECT_NAME2)
|
||
endif
|
||
|
||
@echo "apk(aligned) <== apk"
|
||
$(Q)rm -f $(TARGET_OUT_STAGING)/$(PROJECT_NAME2).apk
|
||
@# verbose mode : -v
|
||
$(Q)$(PROJECT_SDK)/tools/zipalign 4 \
|
||
$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2)-unalligned.apk \
|
||
$(TARGET_OUT_STAGING)/$(PROJECT_NAME2).apk
|
||
@# copy file in the final stage :
|
||
$(Q)mkdir -p $(TARGET_OUT_FINAL)/
|
||
@echo "Generated out : $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk"
|
||
$(Q)cp $(TARGET_OUT_STAGING)/$(PROJECT_NAME2).apk $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk
|
||
|
||
|
||
|
||
install:
|
||
@echo ------------------------------------------------------------------------
|
||
@echo Install : $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk
|
||
@echo ------------------------------------------------------------------------
|
||
$(Q)sudo $(PROJECT_SDK)/platform-tools/adb install -r $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk
|
||
|
||
uninstall:
|
||
@echo ------------------------------------------------------------------------
|
||
@echo UnInstall : $(PROJECT_NAME2)
|
||
@echo ------------------------------------------------------------------------
|
||
$(Q)sudo $(PROJECT_SDK)/platform-tools/adb uninstall $(PROJECT_NAME2)
|
||
|
||
log:
|
||
@echo ------------------------------------------------------------------------
|
||
@echo Run android logat
|
||
@echo ------------------------------------------------------------------------
|
||
$(Q)sudo $(PROJECT_SDK)/platform-tools/adb shell logcat
|
||
|
||
shell:
|
||
@echo ------------------------------------------------------------------------
|
||
@echo Run android shell
|
||
@echo ------------------------------------------------------------------------
|
||
sudo $(PROJECT_SDK)/platform-tools/adb shell
|