2012-07-17 10:00:54 +02:00
|
|
|
|
|
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
|
|
|
|
|
# Setup macros definitions
|
|
|
|
|
include $(EWOL_FOLDER)/Build/core/defs.mk
|
|
|
|
|
|
|
|
|
|
# include generic makefile :
|
|
|
|
|
include $(EWOL_FOLDER)/Build/core/check-project-variable.mk
|
|
|
|
|
|
|
|
|
|
|
2012-08-08 18:15:54 +02:00
|
|
|
|
TARGET_OS = Android
|
|
|
|
|
TARGET_ARCH = ARM
|
2012-08-17 18:30:11 +02:00
|
|
|
|
TARGET_CROSS = $(PROJECT_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
|
2012-08-08 18:15:54 +02:00
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
TARGET_OUT_FOLDER_BINARY := ERROR_NOTHING_MUST_BE_SET_HERE
|
|
|
|
|
TARGET_OUT_FOLDER_LIBRAIRY := data/lib/armeabi
|
|
|
|
|
TARGET_OUT_FOLDER_DATA := data/assets
|
|
|
|
|
TARGET_OUT_FOLDER_DOC := doc
|
|
|
|
|
TARGET_OUT_PREFIX_LIBRAIRY := lib
|
|
|
|
|
|
|
|
|
|
|
2012-08-09 18:38:28 +02:00
|
|
|
|
ANDROID_BOARD_ID = 14
|
|
|
|
|
TARGET_GLOBAL_C_INCLUDES+=-I$(PROJECT_NDK)/platforms/android-$(ANDROID_BOARD_ID)/arch-arm/usr/include
|
|
|
|
|
TARGET_GLOBAL_LDLIBS_SHARED = --sysroot=$(PROJECT_NDK)/platforms/android-$(ANDROID_BOARD_ID)/arch-arm
|
2012-08-08 18:15:54 +02:00
|
|
|
|
|
2012-08-15 23:08:49 +02:00
|
|
|
|
#generic makefile
|
2012-08-15 12:07:28 +02:00
|
|
|
|
include $(EWOL_FOLDER)/Build/core/main.mk
|
2012-08-08 18:15:54 +02:00
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
FINAL_FOLDER_JAVA_PROJECT=$(TARGET_OUT_STAGING)/src/$(PROJECT_COMPAGNY_TYPE)/$(PROJECT_COMPAGNY_NAME2)/$(PROJECT_NAME2)
|
2012-09-12 18:17:54 +02:00
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
FINAL_FILE_ABSTRACTION = $(FINAL_FOLDER_JAVA_PROJECT)/$(PROJECT_NAME2).java
|
2012-09-11 18:14:50 +02:00
|
|
|
|
|
2012-09-12 18:17:54 +02:00
|
|
|
|
|
2012-09-11 18:14:50 +02:00
|
|
|
|
$(FINAL_FILE_ABSTRACTION) : $(EWOL_FOLDER)/Java/PROJECT_NAME.java $(CONFIG_GLOBAL_FILE)
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)mkdir -p $(dir $@)
|
|
|
|
|
$(Q)cp $(EWOL_FOLDER)/Java/PROJECT_NAME.java $@
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(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)|" $@
|
2012-09-12 18:17:54 +02:00
|
|
|
|
ifeq ("$(CONFIG___VIDEO__OPENGL_ES_2)","y")
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)sed -i "s|__CONF_OGL_ES_V__|2|" $@
|
2012-09-12 18:17:54 +02:00
|
|
|
|
else
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)sed -i "s|__CONF_OGL_ES_V__|1|" $@
|
2012-09-12 18:17:54 +02:00
|
|
|
|
endif
|
2012-08-15 23:08:49 +02:00
|
|
|
|
|
2012-09-11 18:14:50 +02:00
|
|
|
|
|
2012-09-12 18:17:54 +02:00
|
|
|
|
APPL_VERSION:=$(shell git describe --tags)
|
|
|
|
|
# --abbrev=0)
|
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(eval $(call copy-one-file,$(PROJECT_ICON),$(TARGET_OUT_STAGING)/res/drawable/icon.png))
|
|
|
|
|
|
2012-09-12 18:17:54 +02:00
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(TARGET_OUT_STAGING)/AndroidManifest.xml : $(CONFIG_GLOBAL_FILE) $(TARGET_OUT_STAGING)/res/drawable/icon.png
|
2012-09-11 18:14:50 +02:00
|
|
|
|
@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\" " >> $@
|
2012-11-04 15:42:11 +01:00
|
|
|
|
@echo " package=\"$(PROJECT_COMPAGNY_TYPE).$(PROJECT_COMPAGNY_NAME2).$(PROJECT_NAME2)\" " >> $@
|
2012-09-11 18:14:50 +02:00
|
|
|
|
@echo " android:versionCode=\"1\" " >> $@
|
2012-09-12 18:17:54 +02:00
|
|
|
|
@echo " android:versionName=\"$(APPL_VERSION)\"> " >> $@
|
2012-09-11 18:14:50 +02:00
|
|
|
|
ifeq ("$(CONFIG___VIDEO__OPENGL_ES_2)","y")
|
2012-09-12 18:17:54 +02:00
|
|
|
|
@echo " <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />" >> $@
|
2012-09-11 18:14:50 +02:00
|
|
|
|
endif
|
|
|
|
|
@echo " <uses-sdk android:minSdkVersion=\"$(CONFIG___EWOL_ANDROID_MINIMUM_SDK_VERSION__)\" /> " >> $@
|
|
|
|
|
@echo " " >> $@
|
2012-11-04 15:42:11 +01:00
|
|
|
|
@echo " <application android:label=\"$(PROJECT_NAME)\" " >> $@
|
2012-09-12 18:17:54 +02:00
|
|
|
|
@echo " android:icon=\"@drawable/icon\" " >> $@
|
|
|
|
|
@echo " > " >> $@
|
2012-11-04 15:42:11 +01:00
|
|
|
|
@echo " <activity android:name=\".$(PROJECT_NAME2)\" " >> $@
|
2012-09-11 18:14:50 +02:00
|
|
|
|
@echo " android:label=\"$(CONFIG___EWOL_APPL_BASIC_TITLE__)\" " >> $@
|
2012-09-12 18:17:54 +02:00
|
|
|
|
@echo " android:icon=\"@drawable/icon\" " >> $@
|
2012-09-11 18:14:50 +02:00
|
|
|
|
@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> " >> $@
|
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
|
|
|
|
|
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/
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@# 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"
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)$(PROJECT_SDK)/platform-tools/aapt p -f \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
-M $(TARGET_OUT_STAGING)/AndroidManifest.xml \
|
|
|
|
|
-F $(TARGET_OUT_STAGING)/resources.res \
|
2012-09-09 23:40:51 +02:00
|
|
|
|
-I $(PROJECT_SDK)/platforms/android-15/android.jar\
|
2012-11-04 15:42:11 +01:00
|
|
|
|
-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}]
|
2012-09-09 23:40:51 +02:00
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(Q)mkdir -p $(TARGET_OUT_STAGING)/build/classes/
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@echo ".class <== .java"
|
2012-09-09 23:40:51 +02:00
|
|
|
|
@# more information with : -Xlint
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)javac \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
-d $(TARGET_OUT_STAGING)/build/classes \
|
2012-09-09 23:40:51 +02:00
|
|
|
|
-classpath $(PROJECT_SDK)/platforms/android-15/android.jar \
|
|
|
|
|
$(FINAL_FILE_ABSTRACTION) \
|
2012-09-10 16:46:02 +02:00
|
|
|
|
$(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 \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(TARGET_OUT_STAGING)/src/R.java
|
2012-09-09 23:40:51 +02:00
|
|
|
|
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@echo ".dex <== .class"
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)$(PROJECT_SDK)/platform-tools/dx \
|
2012-09-10 16:46:02 +02:00
|
|
|
|
--dex --no-strict \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
--output=$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2).dex \
|
|
|
|
|
$(TARGET_OUT_STAGING)/build/classes/
|
2012-09-09 23:40:51 +02:00
|
|
|
|
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@echo ".apk <== .dex, assets, .so, res"
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)$(PROJECT_SDK)/tools/apkbuilder \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2)-unalligned.apk \
|
2012-09-10 16:46:02 +02:00
|
|
|
|
-u \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
-z $(TARGET_OUT_STAGING)/resources.res \
|
|
|
|
|
-f $(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2).dex \
|
|
|
|
|
-rf $(TARGET_OUT_STAGING)/data
|
2012-09-10 16:46:02 +02:00
|
|
|
|
|
|
|
|
|
@# doc :
|
|
|
|
|
@# http://developer.android.com/tools/publishing/app-signing.html
|
2012-09-09 23:40:51 +02:00
|
|
|
|
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@# keytool is situated in $(JAVA_HOME)/bin ...
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(if $(wildcard ./$(PROJECT_NAME2)-$(BUILD_DIRECTORY_MODE).jks),$(empty), \
|
|
|
|
|
$(Q)echo "./$(PROJECT_NAME2)-$(BUILD_DIRECTORY_MODE).jks <== dynamic key (NOTE : It might ask some question to generate the key for android)" ; \
|
2012-09-10 16:46:02 +02:00
|
|
|
|
keytool -genkeypair -v \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
-keystore ./$(PROJECT_NAME2)-$(BUILD_DIRECTORY_MODE).jks \
|
|
|
|
|
-storepass Pass$(PROJECT_NAME2) \
|
|
|
|
|
-alias alias$(PROJECT_NAME2) \
|
|
|
|
|
-keypass PassK$(PROJECT_NAME2) \
|
2012-09-10 16:46:02 +02:00
|
|
|
|
-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 ...
|
2012-09-09 23:40:51 +02:00
|
|
|
|
@echo "apk(Signed) <== apk"
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@#generate the pass file :
|
2012-11-04 15:42:11 +01:00
|
|
|
|
@echo "Pass$(PROJECT_NAME2)" > tmpPass.boo
|
|
|
|
|
@echo "PassK$(PROJECT_NAME2)" >> tmpPass.boo
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@# verbose mode : -verbose
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)jarsigner \
|
2012-09-10 16:46:02 +02:00
|
|
|
|
-sigalg MD5withRSA \
|
|
|
|
|
-digestalg SHA1 \
|
2012-11-04 15:42:11 +01:00
|
|
|
|
-keystore ./$(PROJECT_NAME2)-$(BUILD_DIRECTORY_MODE).jks \
|
|
|
|
|
$(TARGET_OUT_STAGING)/build/$(PROJECT_NAME2)-unalligned.apk \
|
|
|
|
|
alias$(PROJECT_NAME2) \
|
2012-09-10 16:46:02 +02:00
|
|
|
|
< tmpPass.boo
|
|
|
|
|
|
2012-09-13 09:52:20 +02:00
|
|
|
|
$(Q)rm tmpPass.boo
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@echo "apk(aligned) <== apk"
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(Q)rm -f $(TARGET_OUT_STAGING)/$(PROJECT_NAME2).apk
|
2012-09-10 16:46:02 +02:00
|
|
|
|
@# verbose mode : -v
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(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)/
|
|
|
|
|
$(Q)cp $(TARGET_OUT_STAGING)/$(PROJECT_NAME2).apk $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk
|
|
|
|
|
|
|
|
|
|
|
2012-08-08 18:15:54 +02:00
|
|
|
|
|
2012-09-10 16:46:02 +02:00
|
|
|
|
install:
|
2012-08-18 21:07:46 +02:00
|
|
|
|
@echo ------------------------------------------------------------------------
|
2012-11-04 15:42:11 +01:00
|
|
|
|
@echo Install : $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk
|
2012-08-18 21:07:46 +02:00
|
|
|
|
@echo ------------------------------------------------------------------------
|
2012-08-09 18:38:28 +02:00
|
|
|
|
@# $(PROJECT_SDK)/platform-tools/adb kill-server
|
|
|
|
|
@# install application
|
2012-11-04 15:42:11 +01:00
|
|
|
|
$(Q)sudo $(PROJECT_SDK)/platform-tools/adb install -r $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk
|
2012-08-08 18:15:54 +02:00
|
|
|
|
|
2012-08-18 21:07:46 +02:00
|
|
|
|
uninstall:
|
|
|
|
|
@echo ------------------------------------------------------------------------
|
2012-11-04 15:42:11 +01:00
|
|
|
|
@echo UnInstall : $(TARGET_OUT_FINAL)/$(PROJECT_NAME2).apk
|
2012-08-18 21:07:46 +02:00
|
|
|
|
@echo ------------------------------------------------------------------------
|
|
|
|
|
@echo ... TODO ...
|
|
|
|
|
|
2012-11-04 15:42:11 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log:
|
|
|
|
|
@echo ------------------------------------------------------------------------
|
|
|
|
|
@echo Run android logat
|
|
|
|
|
@echo ------------------------------------------------------------------------
|
|
|
|
|
$(Q)sudo $(PROJECT_SDK)/platform-tools/adb shell logcat
|
|
|
|
|
|