lutin/Makefile.Android.mk

270 lines
12 KiB
Makefile
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

###############################################################################
## @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