====== Alcune prove di sviluppo applicazioni android con Python e P4A ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 08/11/2022 - 09:45 //** // // In riferimento a questi appunti posto tutto il codice del progetto qui : \\ [[https://www.freemedialab.org/code/project.php?p=p4a-demo|p4a-demo]] Durante le mie prime prove alcune cose sono andate storte. In primo luogo ho dovuto creare un mekefile che modificasse la versione del plugin di gradle per android portandolo a 4.2.0 altrimenti non compilava l'apk. Poi ho avuto qualche difficoltà nel trovare della documentazione valida per le api android. Nel senso che la documentazione esiste, ma non è di altissimo livello ancora. Probabilmente la cosa si evolvera' in meglio prossimamente. \\ Mi permetto di riassumere i vantaggi e gli svantaggi che ho incontrato nelle prime prove. ^Vantaggi di usare Python for Android^ |Ti porti dientro il python, il linguaggio che ami da sempre :)| ^Svantaggi di usare Python for Android^ |Ogni apk con la sola webview pesa almeno 8mb| ===== Makefile ===== ANDROID_PACKAGE=org.fabiodm.demo P4A_DISTNAME=p4a_demo PRIVATE_FOLDER=/home/fabio/Progetti/Python/p4a/demo PROJECT_NAME="P4A-demo" all: p4a apk --debug --dist_name=$(P4A_DISTNAME) --private $(PRIVATE_FOLDER) --package=$(ANDROID_PACKAGE) \ --name $(PROJECT_NAME) --version 0.1 --bootstrap=webview --requirements=python3,hostpython3,bottle,plyer --port=8080 --arch armeabi-v7a \ --sdk-dir /opt/android-sdk --ndk-dir /opt/android-ndk --android-api 27 --window --no-compile-pyo \ --permission "android.permission.ACCESS_FINE_LOCATION" \ --permission "android.permission.WRITE_EXTERNAL_STORAGE" \ --permission "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" \ --permission "android.permission.ACCESS_BACKGROUND_LOCATION" \ --permission "android.permission.INTERNET" \ --permission "android.permission.VIBRATE" \ --permission "android.permission.POST_NOTIFICATIONS" \ ; make fix && cp /home/fabio/.local/share/python-for-android/dists/$(P4A_DISTNAME)/build/outputs/apk/debug/$(P4A_DISTNAME)-debug.apk . \ && make run run: adb install -r $(P4A_DISTNAME)-debug.apk adb shell monkey -p $(ANDROID_PACKAGE) -c android.intent.category.LAUNCHER 1 adb logcat |grep python fix: cp build.gradle /home/fabio/.local/share/python-for-android/dists/$(P4A_DISTNAME) cd /home/fabio/.local/share/python-for-android/dists/$(P4A_DISTNAME)/ && /home/fabio/.local/share/python-for-android/dists/$(P4A_DISTNAME)/gradlew assembleDebug serve: python -m http.server cleanall: p4a clean_all clean: p4a clean_builds ==== Fix del file build.gradle ==== Come gia' accennato nelle mie prove ho incontrato una incompatibilita' del file **build.gradle** con il resto dell'ambiente. Cercando online ho trovato la soluzione. Ho ridotto la versione del plugin di gradle per android. L'ho portata a 4.2.0 . Il **make fix** non fa altro che **sovrascrivere il build.gradle** con uno opportunamente patchato. Lo allego qui sotto. **build.gradle** (fix temporaneo, spero si risolva in qualche modo piu' elegante) // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.2.0' } } allprojects { repositories { google() jcenter() flatDir { dirs 'libs' } } } apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion '30.0.2' defaultConfig { minSdkVersion 21 targetSdkVersion 27 versionCode 10211 versionName '0.1' manifestPlaceholders = [:] } packagingOptions { jniLibs { useLegacyPackaging = true } doNotStrip '**/*.so' } buildTypes { debug { } release { } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { main { jniLibs.srcDir 'libs' java {} } } aaptOptions { noCompress "tflite" } } dependencies { } ==== Debug delle applicazioni ==== Per fare il debug configurare il telefono per ADB e impartire i seguenti comandi: adb logcat |grep python In questa maniera verra filtrati i logs relativi all'interprete Python. Sara' piu' facile fare il debug delle applicazioni.