【Android】常见问题集锦

填坑,填不完,根本填不完

文章目录

    • [1. 报错信息:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @1a7525c8](#1. 报错信息:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @1a7525c8)
    • [2. Package Name not found in /******/app/src/main/AndroidManifest.xml, and namespace not specified. Please specify a namespace for the generated R and BuildConfig classes via android.namespace in the module's build.gradle file like so:](#2. Package Name not found in /******/app/src/main/AndroidManifest.xml, and namespace not specified. Please specify a namespace for the generated R and BuildConfig classes via android.namespace in the module's build.gradle file like so:)
    • 3.项目包名重命名
    • [4. getResources().getColor(int)' 已经过时了](#4. getResources().getColor(int)‘ 已经过时了)
    • [5. android:windowIsTranslucent=true导致页面转场动画穿透](#5. android:windowIsTranslucent=true导致页面转场动画穿透)
    • [6. Android自定义打包名称](#6. Android自定义打包名称)
    • [7. 检查和更新Android gradle插件](#7. 检查和更新Android gradle插件)
    • [8. Android 蓝牙无法连接或无法获取蓝牙权限是否获取](#8. Android 蓝牙无法连接或无法获取蓝牙权限是否获取)
    • 9.组合文字设置:字体、颜色、下划线、图片等

1. 报错信息:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @1a7525c8

现象:此问题出现在java9以上版本,打包时Android studio报错

在Java 9及更高版本中,模块化系统引入了严格的封装规则。当你打包项目为JAR并尝试运行时遇到类似"module java.base does not 'opens java.lang' to unnamed module"的错误,这是因为某个类或包试图反射访问java.base模块中的非公开API,而未命名模块(即不是以模块形式构建的JAR)没有被授予这种权限。

解决:将以下内容添加到gradle.properties.

java 复制代码
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 \
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED

参考:【Error accessible: module java.base does not "opens java.lang" to unnamed module @3ac3fd8b】

2. Package Name not found in /******/app/src/main/AndroidManifest.xml, and namespace not specified. Please specify a namespace for the generated R and BuildConfig classes via android.namespace in the module's build.gradle file like so:

原因:未在清单文件中设置包名或者在gradle中命名空间,package 和 nameSpace 同样效果

解决:配置包名即可

3.项目包名重命名

  1. 修改包名设置,清单文件,gradle
  2. 修改包名目录,直接修改无效
    新建目录,在整体迁移
  3. 修改R文件名称
    例如:MainActivity中import com.ang.cafe.R 修改为 import com.ang.iot.cafe.R
    AndroidStudio --->Edit --->Find ---> Replace in Path 替换既可;
    全局替换,快捷键:Ctrl + Shift + R

4. getResources().getColor(int)' 已经过时了

使用最新官方推荐的方法:

textView.setTextColor(ContextCompat.getColor(mContext,R.color.black))

5. android:windowIsTranslucent=true导致页面转场动画穿透

此方法是theme里面的属性设置,将window设置成透明,会导致activity转场动画穿透,看起来效果就是页面闪烁

6. Android自定义打包名称

java 复制代码
android {
    //....
 
    applicationVariants.all{ variant ->
        variant.outputs.all{
            def createTime = new Date().format("MMddHHmm", TimeZone.getTimeZone("GMT+08:00"))
            def fileName = "YourProjectName_${defaultConfig.versionName}_${buildType.name}_${createTime}.apk"
            outputFileName = fileName
        }
    }
 
    //....

7. 检查和更新Android gradle插件

确保在 Demo/gradle/wrapper/build.gradle 文件中设置正确的 AGP(Android Gradle Plugin 的缩写,中文全称是 Android Gradle 插件) 版本。

java 复制代码
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.0'
    }
}

8. Android 蓝牙无法连接或无法获取蓝牙权限是否获取

ps:Android 12 一加手机,检查手机权限时,蓝牙已经授权,但是无法获取蓝牙的授权状态依然是false。

从Android 12开始,过去的蓝牙权限被拆分成了3个新的权限,并且全都是运行时权限(需要动态申请):

BLUETOOTH_SCAN 用于使用蓝牙扫描附件其他的蓝牙设备

BLUETOOTH_ADVERTISE 用于允许当前的设备被其他的蓝牙设备所发现

BLUETOOTH_CONNECT 用于连接之前已经配对过的蓝牙设备

因此maxSdkVersion="30"以上的权限需要申请新增的蓝牙权限,上述3个权限属于组权限,理论上申请一个即可。

Android连接蓝牙设备问题(android.permission.BLUETOOTH)

9.组合文字设置:字体、颜色、下划线、图片等

java 复制代码
SpannableString spanString = new SpannableString("欢迎光临Harvic的博客"); 
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC); 
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
editText.setText(spanString); 

Android中的SpannableString与SpannableStringBuilder详解

相关推荐
2401_8979078625 分钟前
10天学会flutter DAY2 玩转dart 类
android·flutter
m0_748233641 小时前
【PHP】部署和发布PHP网站到IIS服务器
android·服务器·php
Yeats_Liao2 小时前
Spring 定时任务:@Scheduled 注解四大参数解析
android·java·spring
雾里看山4 小时前
【MySQL】 库的操作
android·数据库·笔记·mysql
水瓶丫头站住12 小时前
安卓APP如何适配不同的手机分辨率
android·智能手机
xvch13 小时前
Kotlin 2.1.0 入门教程(五)
android·kotlin
xvch16 小时前
Kotlin 2.1.0 入门教程(七)
android·kotlin
望风的懒蜗牛17 小时前
编译Android平台使用的FFmpeg库
android
浩宇软件开发17 小时前
Android开发,待办事项提醒App的设计与实现(个人中心页)
android·android studio·android开发
ac-er888818 小时前
Yii框架中的多语言支持:如何实现国际化
android·开发语言·php