赠人玫瑰,手有余香。但行好事,无问西东。
文章目录
- 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:
- 3.项目包名重命名
- 4. getResources().getColor(int)‘ 已经过时了
- 5. android:windowIsTranslucent=true导致页面转场动画穿透
- 6. Android自定义打包名称
- 7. 检查和更新Android gradle插件
- 8. Android 蓝牙无法连接或无法获取蓝牙权限是否获取
- 9.组合文字设置:字体、颜色、下划线、图片、点击事件等
- 10. gerrit 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain
- 11. android打包报错 AAPT: error: IDAT: incorrect data check. AAPT: error: file failed to compile.
- 12、bash: ../gradlew: 没有那个文件或目录
- 13、 bash: ../gradlew: 权限不够
- 14、快速修改导入的R文件包名
- 15、Could not find scan-2.2.0.300.jar (com.huawei.hms:scan:2.2.0.300).
- 16、Error: The drawable "bg_app" in drawable-night-mdpi has no declaration in the base drawable folder or in a drawable-densitydpi folder; this can lead to crashes when the drawable is queried in a configuration that does not match this qualifier [MissingDefaultResource]
- 17、Apps registering for non-system broadcasts should use the ContextCompat#registerReceiver APIs with flags set to either RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED.
- 18、adb server version (41) doesn't match this client (39); killing
- 19、ubutun系统连接adb设备提示no permission (user in plugdev group)
- 20、gerrit编译错误:Failed to apply plugin 'com.android.internal.application'.
- 20、隐藏HMS scan 扫码界面,相册的方法
- 21、安装APK提示Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]
- 22、 adb: failed to install game.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package <package_name>]
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.
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.项目包名重命名
- 修改包名设置,清单文件,gradle
- 修改包名目录,直接修改无效
新建目录,在整体迁移 - 修改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自定义打包名称
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 插件) 版本。
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.组合文字设置:字体、颜色、下划线、图片、点击事件等
SpannableString spanString = new SpannableString("欢迎光临Harvic的博客");
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(spanString);
// 设置富文本点击事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
// 设置文本颜色为蓝色
ds.setColor(Color.BLUE);
}
};
Android中的SpannableString与SpannableStringBuilder详解
10. gerrit 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain
上传:gradle-wrapper.jar/ gradle-wrapper.properties
解决:添加gradle
$ git add -f android/gradle/wrapper/gradle-wrapper.jar
11. android打包报错 AAPT: error: IDAT: incorrect data check. AAPT: error: file failed to compile.
16:56:02 > A failure occurred while executing
com.android.build.gradle.internal.res.Aapt2CompileRunnable 16:56:02
Android resource compilation failed 16:56:02 ERROR:/******/src/main/res/drawable-mdpi/code.png: AAPT: error:file failed to compile.
在app/build.gradle文件中添加下列代码
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
12、bash: …/gradlew: 没有那个文件或目录
gerrit需要上传gradlew文件
13、 bash: …/gradlew: 权限不够
使用 git update-index --chmod=+x 增加文件的执行权限
使用git update-index --chmod=-x 撤销文件的执行权限。
这些命令都是直接作用于Git索引(也称为暂存区)的,它们不会直接修改工作区中的文件权限。所以,如果你想要在文件权限改变后将其提交到版本库中,你需要在操作之后再执行git add
以更新索引,并在提交提交之前执行git commit
命令。
14、快速修改导入的R文件包名
例如:MainActivity中import com.ang.cafe.R 修改为 import com.ang.iot.cafe.R
AndroidStudio —>Edit —>Find —> Replace in Path 替换既可;
全局替换快捷键:Ctrl + Shift + R
15、Could not find scan-2.2.0.300.jar (com.huawei.hms:scan:2.2.0.300).
Searched in the following locations:
解释:gerrit 会去gradle配置的maven服务器查找依赖,先是本地配置的外网镜像,然后是本地的依赖,外网访问较慢或安全问题一般无法访问。增加huawei的maven镜像配置到本地maven仓库
16、Error: The drawable “bg_app” in drawable-night-mdpi has no declaration in the base drawable folder or in a drawable-densitydpi folder; this can lead to crashes when the drawable is queried in a configuration that does not match this qualifier [MissingDefaultResource]
解释:缺少白天模式的引用背景图,在白天黑夜模式切换时可能会出现crash.
17、Apps registering for non-system broadcasts should use the ContextCompat#registerReceiver APIs with flags set to either RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED.
以下为提示信息原文
In Android U, all receivers registering for non-system broadcasts are required to include a flag indicating the receiver’s exported state. Apps registering for non-system broadcasts should use the ContextCompat#registerReceiver APIs with flags set to either RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED.
意思是Android14 普通应用注册广播registerReceiver会报错,提示需要添加一个参数RECEIVER_EXPORTED 或者 RECEIVER_NOT_EXPORTED。
从Android13开始,注册静态广播时,需设置对其他应用的可见性。
解法:
if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) {
context.registerReceiver(new LocaleChangeReceiver(), filter, Context.RECEIVER_EXPORTED);
} else {
context.registerReceiver(new LocaleChangeReceiver(), filter);
}
18、adb server version (41) doesn’t match this client (39); killing
现象:Android studio 可以连接adb设备,但是切换到命令行运行adb,显示此问题,调用多次adb devices可以显示设备,命令行可用,但Android studio无法识别到设备
分析:实际是因为ubutun升级了Android studio,之前老款的Android studio配置的adb环境变量一直未升级,导致环境变量配置的是旧版adb39版本,与客户端41不匹配
解决:将新版Android studio的adb拷到环境变量配置里面,原有的删除,重启运行即可
19、ubutun系统连接adb设备提示no permission (user in plugdev group)
- sudo vim /etc/udev/rules.d/51-android.rules 创建一个规则文件
- 文件中输入如下内容
SUBSYSTEM==“usb”, MODE=“0660”, GROUP=“plugdev”, SYMLINK+=“android%n” - :wq 保持退出,使用cat命令查看
cat /etc/udev/rules.d/51-android.rules - 重新插拔USB设备,可弹出允许调试按键,输入adb devices即可解决
Ubuntu18.04提示adb设备没有权限 no permission (user in plugdev group)-最简单方法
20、gerrit编译错误:Failed to apply plugin ‘com.android.internal.application’.
现象: A problem occurred evaluating project ‘:app’.
10:30:01 > Failed to apply plugin ‘com.android.internal.application’.
10:30:01 > The option ‘android.enableBuildCache’ is deprecated.
10:30:01 The current default is ‘false’.
10:30:01 It was removed in version 7.0 of the Android Gradle plugin.
10:30:01 The Android-specific build caches were superseded by the Gradle build cache (https://docs.gradle.org/current/userguide/build_cache.html).
分析:系老版本android环境配置问题,gradle.properties中此项设置android.enableBuildCache已经在7.0版本开始被移除,编译缓存优化的问题gradle从7.0以后已经被优化,有更好的方法,故此方法被废弃。
20、隐藏HMS scan 扫码界面,相册的方法
现象:HMS scan层级较深且未开发界面控件设置方法,自定义或者更换扫码,工作量和时间均大
思路:在application中,通过registerLifeCycle在onActivityCreated中通过获取获取界面的控件再去隐藏
/**
* 隐藏华为扫码界面图库按钮,相册权限非必要
*
* @param view 待遍历的视图
*/
private void traverseView(View view) {
if (view instanceof ViewGroup) {
ViewGroup group = (ViewGroup) view;
for (int i = 0; i < group.getChildCount(); i++) {
View child = group.getChildAt(i);
// 根据特征匹配(例如:ImageButton 且内容描述为 "从相册选择")
if (child instanceof ImageView) {
ImageView button = (ImageView) child;
if ("图库".equals(button.getContentDescription())) {
button.setVisibility(View.GONE);
return;
}
}
traverseView(child);
}
}
}
21、安装APK提示Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]
解法:在AndroidManifest.xml 添加配置“android:extractNativeLibs=“true”,设置so库压缩,并且对齐
原因:此属性默认为false,即android打包的时候默认是对so库不进行压缩,so库较大会出现上述提取失败的情况。
一文了解 APK瘦身属性android:extractNativeLibs
22、 adb: failed to install game.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package <package_name>]
意思是说安装包没有 V2 或更高等级的签名。
现象:系adb给apk签名时提示报错,签名用的jarsigner,签出的签名是V1类型。
解法:推荐使用ApkSigner进行签名,可以签V2签名,但需要注意签名前对APK文件进行4字节对齐