/Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/AndroidManifest.xml:5: Warning: READ_EXTERNAL_STORAGE is deprecated (and is not granted) when targeting Android 13+. If you need to query or interact with MediaStore or media files on the shared storage, you should instead use one or more new storage permissions: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO or READ_MEDIA_AUDIO. [ScopedStorage] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Explanation for issues of type "ScopedStorage": Scoped storage is enforced on Android 10+ (or Android 11+ if using requestLegacyExternalStorage). In particular, WRITE_EXTERNAL_STORAGE will no longer provide write access to all files; it will provide the equivalent of READ_EXTERNAL_STORAGE instead. As of Android 13, if you need to query or interact with MediaStore or media files on the shared storage, you should be using instead one or more new storage permissions: * android.permission.READ_MEDIA_IMAGES * android.permission.READ_MEDIA_VIDEO * android.permission.READ_MEDIA_AUDIO and then add maxSdkVersion="33" to the older permission. See the developer guide for how to do this: https://developer.android.com/about/versions/13/behavior-changes-13#granula r-media-permissions The MANAGE_EXTERNAL_STORAGE permission can be used to manage all files, but it is rarely necessary and most apps on Google Play are not allowed to use it. Most apps should instead migrate to use scoped storage. To modify or delete files, apps should request write access from the user as described at https://goo.gle/android-mediastore-createwriterequest. To learn more, read these resources: Play policy: https://goo.gle/policy-storage-help Allowable use cases: https://goo.gle/policy-storage-usecases https://goo.gle/android-storage-usecases /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/build.gradle.kts:13: Warning: Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. [OldTargetApi] targetSdk = 34 ~~~~~~~~~~~~~~ Explanation for issues of type "OldTargetApi": When your application or sdk runs on a version of Android that is more recent than your targetSdkVersion specifies that it has been tested with, various compatibility modes kick in. This ensures that your application continues to work, but it may look out of place. For example, if the targetSdkVersion is less than 14, your app may get an option button in the UI. To fix this issue, set the targetSdkVersion to the highest available value. Then test your app to make sure everything works correctly. You may want to consult the compatibility notes to see what changes apply to each version you are adding support for: https://developer.android.com/reference/android/os/Build.VERSION_CODES.html as well as follow this guide: https://developer.android.com/distribute/best-practices/develop/target-sdk. html https://developer.android.com/distribute/best-practices/develop/target-sdk.html /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/wrapper/gradle-wrapper.properties:4: Warning: A newer version of Gradle than 8.13 is available: 8.14.4 [AndroidGradlePluginVersion] distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:2: Warning: A newer version of com.android.application than 8.11.2 is available: 9.1.0 [AndroidGradlePluginVersion] agp = "8.11.2" ~~~~~~~~ Explanation for issues of type "AndroidGradlePluginVersion": This detector looks for usage of the Android Gradle Plugin where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find. /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/build.gradle.kts:8: Warning: A newer version of compileSdkVersion than 34 is available: 36 [GradleDependency] compileSdk = 34 ~~~~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/build.gradle.kts:40: Warning: A newer version of androidx.work:work-runtime-ktx than 2.9.0 is available: 2.11.1 [GradleDependency] implementation("androidx.work:work-runtime-ktx:2.9.0") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:4: Warning: A newer version of androidx.core:core-ktx than 1.10.1 is available: 1.17.0 [GradleDependency] coreKtx = "1.10.1" ~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:6: Warning: A newer version of androidx.test.ext:junit than 1.1.5 is available: 1.3.0 [GradleDependency] junitVersion = "1.1.5" ~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:7: Warning: A newer version of androidx.test.espresso:espresso-core than 3.5.1 is available: 3.7.0 [GradleDependency] espressoCore = "3.5.1" ~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:8: Warning: A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.1 [GradleDependency] appcompat = "1.6.1" ~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:9: Warning: A newer version of com.google.android.material:material than 1.10.0 is available: 1.13.0 [GradleDependency] material = "1.10.0" ~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:10: Warning: A newer version of androidx.activity:activity than 1.8.0 is available: 1.12.4 [GradleDependency] activity = "1.8.0" ~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:11: Warning: A newer version of androidx.constraintlayout:constraintlayout than 2.1.4 is available: 2.2.1 [GradleDependency] constraintlayout = "2.1.4" ~~~~~~~ Explanation for issues of type "GradleDependency": This detector looks for usages of libraries where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find. /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/build.gradle.kts:39: Warning: A newer version of com.squareup.okhttp3:okhttp than 4.12.0 is available: 5.3.2 [NewerVersionAvailable] implementation("com.squareup.okhttp3:okhttp:4.12.0") // or latest version ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/gradle/libs.versions.toml:3: Warning: A newer version of org.jetbrains.kotlin.android than 1.9.0 is available: 2.3.10 [NewerVersionAvailable] kotlin = "1.9.0" ~~~~~~~ Explanation for issues of type "NewerVersionAvailable": This detector checks with a central repository to see if there are newer versions available for the dependencies used by this project. This is similar to the GradleDependency check, which checks for newer versions available in the Android SDK tools and libraries, but this works with any MavenCentral dependency, and connects to the library every time, which makes it more flexible but also much slower. /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/java/com/gramiatechnologies/gramia/NotificationService.kt:27: Warning: Use of scheduleAtFixedRate is strongly discouraged because it can lead to unexpected behavior when Android processes become cached (tasks may unexpectedly execute hundreds or thousands of times in quick succession when a process changes from cached to uncached); prefer using schedule [DiscouragedApi] timer.scheduleAtFixedRate(object : TimerTask() { ^ Explanation for issues of type "DiscouragedApi": Discouraged APIs are allowed and are not deprecated, but they may be unfit for common use (e.g. due to slow performance or subtle behavior). /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/java/com/gramiatechnologies/gramia/MainActivity.kt:46: Warning: Using setJavaScriptEnabled can introduce XSS vulnerabilities into your application, review carefully [SetJavaScriptEnabled] webSettings.javaScriptEnabled = true ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Explanation for issues of type "SetJavaScriptEnabled": Your code should not invoke setJavaScriptEnabled if you are not sure that your app really requires JavaScript support. https://goo.gle/SetJavaScriptEnabled https://developer.android.com/training/articles/security-tips /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/res/values/colors.xml:3: Warning: The resource R.color.black appears to be unused [UnusedResources] #FF000000 ~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/res/values/colors.xml:4: Warning: The resource R.color.white appears to be unused [UnusedResources] #FFFFFFFF ~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/res/drawable/ic_launcher_foreground.xml:1: Warning: The resource R.drawable.ic_launcher_foreground appears to be unused [UnusedResources] like this: ```xml ``` /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:2: Warning: The application adaptive icon is missing a monochrome tag [MonochromeLauncherIcon] ^ /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:2: Warning: The application adaptive roundIcon is missing a monochrome tag [MonochromeLauncherIcon] ^ Explanation for issues of type "MonochromeLauncherIcon": If android:roundIcon and android:icon are both in your manifest, you must either remove the reference to android:roundIcon if it is not needed; or, supply the monochrome icon in the drawable defined by the android:roundIcon and android:icon attribute. For example, if android:roundIcon and android:icon are both in the manifest, a launcher might choose to use android:roundIcon over android:icon to display the adaptive app icon. Therefore, your themed application iconwill not show if your monochrome attribute is not also specified in android:roundIcon. /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/res/drawable/ic_notification.png: Warning: Found bitmap drawable res/drawable/ic_notification.png in densityless folder [IconLocation] /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/res/drawable/ic_notification_ee.png: Warning: Found bitmap drawable res/drawable/ic_notification_ee.png in densityless folder [IconLocation] Explanation for issues of type "IconLocation": The res/drawable folder is intended for density-independent graphics such as shapes defined in XML. For bitmaps, move it to drawable-mdpi and consider providing higher and lower resolution versions in drawable-ldpi, drawable-hdpi and drawable-xhdpi. If the icon really is density independent (for example a solid color) you can place it in drawable-nodpi. https://developer.android.com/guide/practices/screens_support.html /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/java/com/gramiatechnologies/gramia/MainActivity.kt:101: Warning: Use the KTX extension function SharedPreferences.edit instead? [UseKtx] sharedPreferences.edit().putString("last_institution_user_id", institutionUserId).apply() ~~~~~~~~~~~~~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/java/com/gramiatechnologies/gramia/MainActivity.kt:147: Warning: Use the KTX extension function String.toUri instead? [UseKtx] intent.data = Uri.parse(url) ~~~~~~~~~~~~~~ /Users/terrencemahachi/AndroidStudioProjects/Gramia/app/src/main/java/com/gramiatechnologies/gramia/MainActivity.kt:147: Warning: Use the KTX extension function String.toUri instead? [UseKtx] intent.data = Uri.parse(url) ~~~~~~~~~~~~~~ Explanation for issues of type "UseKtx": The Android KTX libraries decorates the Android platform SDK as well as various libraries with more convenient extension functions available from Kotlin, allowing you to use default parameters, named parameters, and more. Available options: **remove-defaults** (default is true): Whether to skip arguments that match the defaults provided by the extension. Extensions often provide default values for some of the parameters. For example: ```kotlin fun Path.readLines(charset: Charset = Charsets.UTF_8): List { return Files.readAllLines(this, charset) } ``` This lint check will by default automatically omit parameters that match the default, so if your code was calling ```kotlin Files.readAllLines(file, Charset.UTF_8) ``` lint would replace this with ```kotlin file.readLines() ``` rather than ```kotlin file.readLines(Charset.UTF_8 ``` You can turn this behavior off using this option. To configure this option, use a `lint.xml` file with an