Pages

Wednesday, January 15, 2025

How to add internationalization to your android application ?

 

Configure your project


First, you need to add the following configuration in your file build.gradle (Module : app) :


android {

.....

androidResources {
generateLocaleConfig = true
}

}

In the "res" directory, define the default language. To do that, you need to create resources.properties file with the following content  :

unqualifiedResLocale=en-US


You will probably need to resynchronize your project.


Define strings.xml for each country


You could create the string.xml file which will contains the translation

for the country you choose. For example, il you want to translate in Japanese,

create the strings.xml for Japanese :




You will see a strings.xml for the select country :




Define and use translation


In each strings.xml, you have to define variables with traduction .

Example: 


In the English strings.xml, you can set the value manually like this :
<resources>
    <string name="advanced">Advanced</string>
Then, in French strings.xml, you set the translation :
<resources>
    <string name="advanced">Avancé</string>


You can also define variables automatically (like advanced variable). To do that, put the cursor on a string you want to translate and do ALT - ENTER.

Then select Extract String resources :

Example :

In your code, you have the following line :
message: String = "Bienvenue !" 

Put the cursor on "Bienvenue" and ALT ENTER . You'll see this screen :





Click OK and Android Studio will generate the following automatically :

message: String = stringResource(R.string.welcome)


Other way to use locale in your code

If your phone is in Japanese, then this will use the corresponding strings.xml file
In my small Android application QuizzBee, I load files according to language :

var country = Locale.getDefault().getCountry()
if (country == "FR") {
...



Monday, January 13, 2025

Notes sur la mise à jour d'un projet Android : migration du sdk 33 vers sdk 34

 

La migration d'un projet Android de la version 33 vers la version 34 a été très simple.

J'ai tout d'abord procédé à la mise à jour des dependencies dans le fichier build.gradle.

Remarque :

  • J'avais mis la version 1.15 pour androidx.core mais cette version nécessite le sdk 35 au lieu du sdk 34, j'ai donc finalement opté pour le la version 1.13.1 :

// ================ CORE

def core_version = "1.13.1"

implementation "androidx.core:core-ktx:$core_version"


Ensuite, il suffit de vous rendre dans Project Structure et de modifier 

  • Target SDK 34
  • Compile SDK 34







Remarque :

Dans Android Studio, la ligne TargetSdk 34 dans  build.gradle était toujours avec une erreur dans l'IDE  (souligné en rouge). J'ai redémarré l'IDE et cela a disparu !


debugRuntimeClasspathCopy configuration has been deprecated for consumption

 

I saw warning during the gradle build.

To show details, I had the following in the gradle.properties file :

org.gradle.warning.mode=all


After that, I saw the error details in console :




To now, I didn't find the solution.That's why, I asked the question on StackOverFlow :

https://stackoverflow.com/questions/79351614/debugruntimeclasspathcopy-configuration-has-been-deprecated-for-consumption




Sunday, January 12, 2025

Une saison aux abeilles



Une petite vidéo intéressante pendant la saison hivernale sur une chaîne Youtube que j'apprécie  :


Saturday, January 11, 2025

Elasticsearch : cerebro, une solution web pour gérer votre cluster facilement


Dans le cadre du travail, nous étudions actuellement la solution ElasticSearch et tout son écosystème.
Je suis tombé sur une vidéo intéressante qui décrit l'outil Cerebro, un outil pour gérer les clusters Elasticsearch.











Thursday, January 9, 2025

Notes sur la mise à jour d'un projet Android : Etape 1 Migration d'un projet vers jetpack-compose

 

Migration vers Jetpack compose



Cet article n'est pas vraiment un article.Il s'agit plus d'une prise de notes.

Tout d'abord, pour migrer vers jetpack compose, j'ai créé une branche Git, c'est plus sûr et je peux facilement revenir en arrière si besoin.



Ajout de la configuration



Il faut tout d'abord mettre en place la configuration Compose 
Vous pouvez consulter la documentation officielle : https://developer.android.com/develop/ui/compose/setup?hl=fr#groovy_1

  • Ajout de compose à true

Dans build.gradle (app) :
buildFeatures {
    dataBinding true
    viewBinding true
    compose true
}

  • Ajout dans le build


    def composeBom = platform('androidx.compose:compose-bom:2024.10.01')
    implementation composeBom
    androidTestImplementation composeBom
    // Choose one of the following:
    // Material Design 3
    implementation 'androidx.compose.material3:material3'
    // or Material Design 2
    implementation 'androidx.compose.material:material'
    // or skip Material Design and build directly on top of foundational components
    implementation 'androidx.compose.foundation:foundation'
    // or only import the main APIs for the underlying toolkit systems,
    // such as input and measurement/layout
    implementation 'androidx.compose.ui:ui'
    // Android Studio Preview support
    implementation 'androidx.compose.ui:ui-tooling-preview'
    debugImplementation 'androidx.compose.ui:ui-tooling'
    // UI Tests
    androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
    debugImplementation 'androidx.compose.ui:ui-test-manifest'
    // Optional - Included automatically by material, only add when you need
    // the icons but not the material library (e.g. when using Material3 or a
    // custom design system based on Foundation)
    implementation 'androidx.compose.material:material-icons-core'
    // Optional - Add full set of material icons
    implementation 'androidx.compose.material:material-icons-extended'
    // Optional - Add window size utils
    implementation 'androidx.compose.material3.adaptive:adaptive'
    // Optional - Integration with activities
    implementation 'androidx.activity:activity-compose:1.9.2'
    // Optional - Integration with ViewModels
    implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5'
    // Optional - Integration with LiveData
    implementation 'androidx.compose.runtime:runtime-livedata'
    // Optional - Integration with RxJava
    implementation 'androidx.compose.runtime:runtime-rxjava2'



Ajout de Compose Compiler Gradle Plugin


J'ai relancé un clean puis un build, et j'ai eu lors d'une de ces deux étapes le message suivant :

Starting in Kotlin 2.0, the Compose Compiler Gradle plugin is required
when compose is enabled. See the following link for more information:
https://d.android.com/r/studio-ui/compose-compiler
Add Compose Compiler Gradle plugin
Affected Modules: app

Au delà la version 2.0, on est censé installer le plugin Compose Compiler Gradle
J'ai donc cliqué sur Add puis do refactor




Mise à jour de KSP


J'ai refait un clean et j'ai eu le message ci-dessous :



ksp-2.0.0-RC2-1.0.20 is too old for kotlin-2.0.0. Please upgrade ksp or downgrade kotlin-gradle-plugin to 2.0.0-RC2.



J'ai donc mis à jour KSP à la version 2.0.21-1.0.27



build.gradle ( project)

plugins {
    id 'com.android.application' version '8.7.3' apply false
    id 'com.android.library' version '8.7.3' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.20-RC' apply false
    id 'com.google.devtools.ksp' version '2.1.0-1.0.29' apply false
    id 'org.jetbrains.kotlin.plugin.compose' version '2.0.0' apply false
}
Je refais le clean et le message a disparu



Remarque :

Si je choisi ksp-2.1.0-1.0.29, j'ai le message :

ksp-2.1.0-1.0.29 is too new for kotlin-2.0.0. Please upgrade kotlin-gradle-plugin to 2.1.0.



Autre message pendant les build


Voici un des messages que j'ai eu lors d'un build :

Unable to find method ''org.jetbrains.kotlin.buildtools.api.SourcesChanges org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.getChangedFiles$default(org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile, org.gradle.work.InputChanges, java.util.List, kotlin.jvm.functions.Function1, int, java.lang.Object)''
'org.jetbrains.kotlin.buildtools.api.SourcesChanges org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.getChangedFiles$default(org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile, org.gradle.work.InputChanges, java.util.List, kotlin.jvm.functions.Function1, int, java.lang.Object)'
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

J'ai cliqué sur le message Re-download dependencies et cela a fonctionné

Finalement, j'ai utilisé la configuration suivante 
:
buildscript {
    ext {
        kotlin_version = '2.0.21'
    }

J'ai cliqué sur le message Re-download dependencies et cela a fonctionné
J'ai fait un rebuild et j'ai exécuté le projet et maintenant tout fonctionne. 

Remarque : Au début, j'avais mis la version 2.1 de Kotlin mais j'ai eu des warnings dans le build : Warning dans le build.gradle (app) Kotlin version that is used for building with Gradle (2.1.0) is not properly supported in the IDE plugin (2.0)

Saturday, January 4, 2025

QuizzBee : test en cours pour le passage en production

 

Cela avance !

L'application Android Community Testeurs a vraiment été utile pour obtenir des testeurs.

Il ne me reste plus qu'à attendre 14 jours :


Voici l'état actuel de mes releases : 



Il faut noter que pour que l'application soit mise en production, il faut veiller à certains points.

Par exemple, il faut plusieurs versions de release dans l'historique des releases.Google souhaite évaluer si l'application a été correctement testé.

Encore une fois, l'application Community-testers est bien faite et vous donne les conseils une fois l'application mise à la disposition des testeurs.

Wednesday, January 1, 2025

Activité apicole du mois de décembre ( suite)

Hier après midi, je suis allé contrôler le candi :
 
Les abeilles ont juste entamé le sachet donc tout va bien.Je referai un contrôle d'ici 15 jours - 3 semaines.
J'ai réussi à ouvrir sans les déranger ce qui je pense est un point important pour qu'elle est plus de chance de passer l'hiver.
Il faisait froid mais beau (5-7°C).La visite a été très rapide, j'ai simplement ouvert le toit et refermé.Le plus long a été le démarrage de l'enfumoir !

How to add internationalization to your android application ?

  Configure your project First, you need to add the following configuration in your file build.gradle (Module : app) : android { ..... andr...