Pages

Showing posts with label android. Show all posts
Showing posts with label android. Show all posts

Wednesday, February 12, 2025

PlayConsole : suppression des warnings lors de la publication (minify, symbole de debogage...)

Lors de la publication des versions dans la PlayConsole, j'avais 2 warnings pour indiquer qu'il était possible de réduire et d'optimiser l'application ( voir https://developer.android.com/build/shrink-code?hl=fr ) .



Pour ne plus avoir de warning, j'utilise la configuration suivante  :



Remarque importante : cela augmente vos temps de compilation de manière significative.Il suffit de le désactiver si vous ne comptez pas publier une version.



Pré-requis pour obtenir les symboles de débogage

Vous devez installer le package NDK sinon les symboles de débogage ne seront pas générés et vous ne verrez pas de répertoire app/build/outputs/native-debug-symbols/

Pour cela, vous devez cocher NDK dans les settings puis OK pour l'installer :



Dans mon cas, malgré l'installation du NDK, j'avais toujours un warning dans la PlayConsole indiquant que je n'avais pas de symboles de débogage.

Je suis donc aller dans le répertoire app\build\intermediates\merged_native_libs\release\mergeReleaseNativeLibs\out\lib

J'ai sélectionné les 4 répertoires et j'ai crée un zip à partir de ces dossiers (sous Windows, sélection des répertoires puis clic droit ajouter à l'archive).

J'ai ainsi obtenu un zip que j'ai renommé (pas d'importance concernant le nom) :


Dans la PlayConsole, j'ai cliqué sur les "..." de AppBundle pour importer le zip  :



J'ai cliqué sur Suivant et c'était bon !

A lire également si vous avez le problème : https://medium.com/@martinolundberg94/how-to-debug-and-fix-google-play-console-warning-about-missing-native-debug-symbols-26ebbebce68c


Thursday, January 30, 2025

Android kotlin : type has no method getValue

 


Here's a common mistake we encounter :




At first, it's disturbing.

The solution is quite simple, you have to add the following import to solve the issue :

import androidx.compose.runtime.getValue


More details here : https://kotlinlang.org/docs/operator-overloading.html

Saturday, January 18, 2025

Publication android : échec de la demande d'accès en production

 


Après avoir attendu 14 jours avec 12 testeurs, j'ai pu enfin  faire une demande d'accès en production .C'est long et on se dit qu'on en a bientôt terminé...




Et bien, non !!!

Deux jours après avoir complété les étapes ci-dessous, j'ai eu le message suivant :



J'avoue avoir été un peu déçu et en plus, je dois recommencer le processus pour avoir mes 12 testeurs !

Pour information, ci-dessous, je vous met les étapes à compléter pour faire la demande.

J'ai répondu honnêtement aux questions et je pensais avoir fait suffisamment de tests mais visiblement cela n'a pas suffit.Je vais maintenant chercher sur le net si je trouve des conseils (et aussi voir le lien proposé par Google) pour réussir à publier ma petite application.


Etape 1 : à propos de votre test fermé






Etape 2 A propos de votre application









Etape 3 Aptitude à passer en production













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




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.

Sunday, December 29, 2024

Publication android : 20 testeurs !

 

Pour publier une application sur le Play store, il faut 12 testeurs pendant au moins 14 jours ! C'est donc assez difficile.

Heureusement, il existe une communauté pour nous aider : testeurs community


https://play.google.com/store/apps/details?id=com.testerscommunity&hl=fr&pli=1

Le principe est simple, vous installer des applications qui elles aussi ont besoin d'être tester, vous déposez des commentaires et en retour, vous obtenez des points.Une fois que vous avez obtenu 60 points, vous pouvez demander à ce que l'on test votre appli.



Quizzbee 1.0 : test fermé accepté

C'est bon, les modifications ont été acceptées et publiées.Cela a pris 4 jours, ce n'est pas trop long au final, je m'attendais à ce que cela prenne plus de temps.
L'application a été testée par un de mes proches,je vais corriger quelques coquilles et également traduire l'application en anglais pour que cela facilite les tests et la diffusion.Il faudra que je repasse par une approbation de Google 😀



PlayConsole : suppression des warnings lors de la publication (minify, symbole de debogage...)

Lors de la publication des versions dans la PlayConsole, j'avais 2 warnings pour indiquer qu'il était possible de réduire et d'o...