====== 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.