Sommaire
Hello
TLDR
J'ai fait une application android qui n'a pas besoin d'Android Studio, c'est là: https://framagit.org/mabu/noisebox. Attention, il vous faudra le compiler vous même.
L'idée
Quand je suis en manque de mauvaise fois, je vais lire d'OC.
Dans ses chroniques, il développe l'idée d'une boite à "Ça alors" quand dans les films, les coïncidences coïncident trop.
Je me suis dis, je veux faire ça.
Le concept
Je vais profiter de cette idée pour apprendre une nouvelle chose. Là ça sera la programmation pour android, mais avec une contrainte : ma machine principale est un vieux micro portable qu'une vieil Atom de 8-10 ans fait tourner péniblement.
Je vais donc chercher à éviter d'utiliser android studio.
Ça tombe bien, il y a tout ce qu'il faut sur debian, il m'a fallu un peu de temps pour trouver, mais un mec y a déjà pensé ici.
En gros, on a juste besoin de make
, d'android-sdk
et d'android-sdk-platform-23
. L'API android est un peu vieille, (android 6.0, 2015) mais ça fait le job.
De mon côté, j'ai besoin de :
- Un son à jouer
- Jouer un son
- Détecter l'orientation du téléphone, et jouer le son à ce moment là.
Son
Pour créer le son à jouer "Ah bah ça alors", je pourrais m'enregistrer, je peux aussi utiliser espeak
et ffmpeg
pour créer un son au format .mp3
que je range dans les ressources de mon paquet : res/raw/sound.mp3
espeak -w sound.wav "Sa alor"
ffmpeg -i sound.wav res/raw/sound.mp3
rm sound.wav
On peut aussi sampler la salle de cinéma qui scande "Oh bah ça, ça tombe bien alors !" dans le film La Cité de la peur.
Jouer du son
Pour jouer un son court, le plus simple est d'utiliser SoundPool
qui permet d'enregistrer plein de petits sons, genre des sons d'interface, à jouer assez vite.
import android.media.SoundPool;
import android.content.Context;
public class NoiseBox extends Activity {
SoundPool sp;
int snd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* création du pool */
sp = new SoundPool.Builder().setMaxStreams(1).build();
/* remplissage du pool*/
snd = sp.load(this, R.raw.sound, 1);
/* à partir d'ici, le son peut être joué avec
sp.play(snd, 1, 1, 0, 0, 1);
*/
}
}
Détection de l'orientation.
Lors de mon premier test, j'utilisais onConfigurationChanged
de la classe Activity
, pour attraper quand le téléphone passe de mode paysage à portrait :
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int orientation = newConfig.orientation;
switch(orientation)
{
case Configuration.ORIENTATION_PORTRAIT:
/* l'orientation vient de passer à portrait */
/* jouer le son ici */
sp.play(snd, 1, 1, 0, 0, 1);
break;
}
}
}
Mais cela implique :
- que la rotation automatique soit activée
- que l'application soit au premier plan
Du coup, j'ai préféré utiliser le senseur d'orientaion.
Pour cela, on implémente l'interface SensorEventListener
. Dans cette interface, la fonction onSensorChanged
est appelée dès qu'un senseur qu'on suit évolue.
L'algorithme est simple : on regarde de quel côté on pointe, si on pointe vers le bas, puis vers le haut, on joue le son.
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import java.lang.Math;
public class NoiseBox extends Activity implements SensorEventListener {
SensorManager sm;
Sensor s;
boolean pointing_up;
boolean pointing_down;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* récupération des senseurs */
sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
/* récupération du capteur d'orientation */
s = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
/* enregistrement aux évenements du capteur */
sm.registerListener(this, s, sm.SENSOR_DELAY_NORMAL);
/* initialisation des positions */
pointing_up = false;
pointing_down = false;
}
@Override
public void onSensorChanged(SensorEvent event) {
float v[] = event.values;
float y = v[1];
float z = Math.abs(v[2]);
if (y > 70 && z < 10) {
/* tiens, on pointe vers le bas */
pointing_down = true;
pointing_up = false;
} else if ( y < -70 && z < 10) {
/* tiens, maintenant, on pointe vers le haut*/
pointing_up = true;
}
if (pointing_up && pointing_down) {
/* si on a pointé vers le bas puis vers le haut, on joue le son */
/* jouer le son la*/
sp.play(snd, 1, 1, 0, 0, 1);
/* reinitialisation des booléens */
pointing_down = false;
pointing_up = false;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
test
Voilà, il n'y a plus qu'à tester le tout, pour cela, il construire le paquet et l'autosigner (fait automatiquement avec make
) et à le télécharger sur le téléphone.
# TapTapMeuh ?
Posté par mansuetus (site web personnel) . Évalué à 10. Dernière modification le 09 décembre 2021 à 08:06.
J'ai pas compris où on lisait les BPM, il manque donc la fonctionnalité principale ;-)
[^] # Re: TapTapMeuh ?
Posté par Elfir3 . Évalué à 2.
Je pense qu'en fournissant un fichier pour chaque syllabe et les faire jouer sur le bon tempo on doit pouvoir ajouter la fonctionnalité. Le résultat devrait être plutôt sympa en plus.
# J'adore !
Posté par Graveen . Évalué à 10.
Je me perds un peu dans tous les IDE, les prises en main diverses, qui font qu'on s'éloigne souvent des fondamentaux, au point qu'on peut les oublier et se noyer dans des bugs d'interfaces qui sont censées t'aider (voire ne plus savoir faire sans).
Je n'avais jamais vraiment réfléchi à ça coté développement mobile, et j'aime beaucoup le fait de revenir à une solution élégante, maitrisée.
Merci pour ton thread !
[^] # Re: J'adore !
Posté par ff9097 . Évalué à 3.
Android Studio n'est pas tout léger c'est clair mais ça fonctionne très bien. Hormis du matériel limité c'est un gros apport.
# Génial
Posté par martoni (site web personnel, Mastodon) . Évalué à 7.
Merci !
Je cherche depuis longtemps à me mettre aux «appli android» mais je me suis toujours perdu dans la lourdeur des différents logiciels qu'il faut télécharger. Sans compter sur la nécessité de se créer des comptes gafam un peu partout pour pouvoir arriver à ses fin.
L'idée de pouvoir faire une appli simple avec juste les packages de sa distribution Linux est très enthousiasmant :)
Bon par contre j'ai pas testé.
J'ai plus qu'une balle
[^] # Re: Génial
Posté par Letho . Évalué à 4.
À vrai dire, le seul logiciel à télécharger est Android Studio. C'est lui qui s'occupe de manager les SDKs, l'émulateur, etc. Ce n'est pas tout léger, j'en conviens. Mais c'est à mon sens un outil efficace, et même plutôt agréable une fois qu'on a pris le temps de le connaître un peu.
Et non, pas besoin du moindre compte Google (ni de quelque compte que ce soit) pour développer une application, encore heureux. Par contre, si tu veux qu'elle soit disponible sur le Play Store, il te faudra effectivement un compte développeur Google. Mais rien n'empêche de fournir ton logiciel sur un store alternatif, ou encore directement sous forme d'apk.
# Ma version
Posté par Le Pnume . Évalué à 8.
Sympa,
Dans le même genre, ya le bruit du coup de fouet comme dans "Big Bang theory" (l'appli existe)
mais je dois avoir qq part un mp3 avec le ricanement de Diabolo (de Satanas et Diabolo) je vais en faire une version avec ce son.
[^] # Re: Ma version
Posté par Francky (site web personnel) . Évalué à 5.
Une boîte à Lambert aurait un succès fou auprès des fans.
007 tu peux pas test ® Mozinor 2006
# Framework Ionic
Posté par Watchwolf . Évalué à 7.
Il est possible d'utiliser des frameworks basés sur le WEB. Personnellement j'utilise ionic avec Angular.
Je fait donc mon application sans Android Studio et sans xcode. En fait je fait un site WEB.
Par contre ensuite j'utilise Android studio (et xcode) pour compiler et déployer la version mobile dans le store qui va bien. Je fait des tests de simulations avec ces outils également.
95% du dev se fait avec un éditeur de texte + navigateur WEB et j'obtiens une application qui fonctionne en web / Android / IPhone / MacOS / tablette.
# Et pour Kotlin ?
Posté par sjub . Évalué à 1.
Est-ce que quelqu'un a déjà fait la même chose pour compiler des applis Android en Kotlin en ligne de commande ? Comme il y a plein de choses qui passent deprecated en Java (AsyncTasks notamment) on sent bien que ça pousse au basculement vers Kotlin.
Mon principal problème est pas forcément Android Studio mais surtout Gradle qui passe son temps à télécharger des trucs dans tous les sens et passe énormément de temps à faire je sais pas quoi avant de compiler…
[^] # Re: Et pour Kotlin ?
Posté par YBoy360 (site web personnel) . Évalué à 2. Dernière modification le 10 décembre 2021 à 13:22.
En théorie, sans IDE, il suffit de faire un :
./gradlew build
Et le tour est joué non ? Ça dépendra juste de Java. Et il faudra au préalable avoir créé le projet (pour avoir le Wrapper Gradle).
Pour exécuter, créer le binaire ou autres, on peut lister les tâches Gradle avec la tâche 'tasks' :
./gradlew tasks
Édit : j'avais pas lu l'intégralité de ta question. Gradle télécharge automatiquement les dépendances car c'est exactement ce qu'on lui demande. Si tu ne veux pas télécharger de dépendances, tu peux soit ne pas les utiliser, soit les recoder. C'est un peu comme si tu reprochais à
apt-get
de télécharger des programmes… Bonne chance.[^] # Re: Et pour Kotlin ?
Posté par sjub . Évalué à 1.
En fait, je souhaiterais supprimer gradle de l'équation et pouvoir utiliser un truc simple comme make par exemple.
[^] # Re: Et pour Kotlin ?
Posté par _kaos_ . Évalué à 3. Dernière modification le 11 décembre 2021 à 06:20.
Il suffit d'utiliser maven !
C'est comme make, sauf à la fin.
Matricule 23415
[^] # Re: Et pour Kotlin ?
Posté par YBoy360 (site web personnel) . Évalué à 0.
Parce que make, c'est simple ??? Ce que tu veux ressemble à vouloir utiliser les autotools à la place de CMake.
Ne pas vouloir utiliser gradle, c'est comme utiliser Debian sans apt-get et consort. On peut très bien faire un script shell qui va d/l les dépendances. Maven va aussi d/l les dépendances, ça n'est pas tellement plus simple que Gradle.
Tu as aussi la possibilité d'utiliser javac directement, un peu comme tu utiliserai gcc. Tu dois même pouvoir faire un makefile utilisant Javac. Pour gérer les dépendances, tu pourras utiliser Ivy, Maven ou Grape. Tu utiliseras 2 outils au lieu d'un.
Je ne sais pas si Kotlin supporte Grape/Yvi dans le code source comme Groovy…
Il y a plein de raisons de ne pas apprécier Gradle :
- il impose un formalisme qui parfois est irritant ;
- la syntaxe est parfois incohérente (ça c'est améliorer avec la version 7.2) ;
- Ils ont fait les DSL de sorte qu'il n'y a pas d'autocompletion vraiment efficace ;
- Les messages d'erreur sont parfois complexe, ou tombe à coté.
Malgré ces défauts, si tu te conforme au formalisme, c'est juste un outils incontournable, et finalement très efficace, surtout sur de gros projets modulaires. Si tu développes ton plugin pour ajouter un truc au build pour faire fonctionner ton code, tu pourras partager ce que tu fais bien plus aisément, puisqu'il y a de grande chance que les intéressés utilisent aussi Gradle.
[^] # Re: Et pour Kotlin ?
Posté par _kaos_ . Évalué à 2. Dernière modification le 11 décembre 2021 à 16:35.
En plus "make like", on peut aussi citer
ant
.Il est plus ancien que
gradle
/maven
, a ses propres forces, comme permettre de tout faire sans "contournement" comparé àmaven
qui impose sa philosophie, mais du coup on fait aussi facilement n'importe quoi.Je n'ai jamais réellement utilisé
gradle
donc je ne peux pas m'exprimer dessus, mais pour ce qui est demaven
, c'est un outil de build dédiéjava
là oumake
est généraliste : il offre donc des facilités pourjava
, et comme tout outil spécifique, il faut l'apprendre en effet.Mais la base, ça reste quand même très abordable, d'autant qu'il fonctionne beaucoup par convention (donc "non spécifié" = "fonctionnement classique").
Matricule 23415
[^] # Re: Et pour Kotlin ?
Posté par ff9097 . Évalué à 3. Dernière modification le 11 décembre 2021 à 01:46.
Il n'y a aucun rapport entre des API taggés obsolètes et une soit-disant envie de pousser Kotlin puisque c'est la même API Android et que Kotlin est 100% compatible avec Java.
Franchement AsyncTask plus personne n'utilise cette horreur depuis des années
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.