Android 开发笔记
CLion 运行报错解决
代码正确,但是一直提示错误 undefined reference to `PrintHandler::PrintHandler(Looper*)' collect2.exe: error: ld returned 1 exit status 无意中发现自己运行的是 main.cpp 而不是整个项目,运行整个项目就会正常了。 具体原因见 AI 这是一个 CLion 或 CMake 配置相关的问题,不是代码逻辑问题,而是你在运行 main.cpp 文件单独作为“单文件运行”时,编译器没有正确链接整个项目的所有 .cpp 文件(例如 Looper.cpp、PrintHandler.cpp 等),从而导致: undefined reference to `Looper::postMessage(...)` undefined reference to `vtable for PrintHandler` ... ✅ 原因详解 在 CLion 中点击右键运行 main.cpp 文件 时: 它会临时生成一个只编译 main.cpp 的目标,没有链接你项目中定义的其他源文件(.cpp),所以报链接错误。 而你点击的是: ❌ 右键 main.cpp → Run main.cpp 只运行单文件,不会编译整个项目。 ✅ 正确做法 请始终使用: ✅ Run 'EmployeeSystem' 或 Run '<your_target_name>' 也就是你在 CMakeLists.txt 中通过 add_executable() 定义的那个目标,例如: ...
Window11 桌面图标变白处理
解决方法 1、删除 icon 的缓存文件即可。 【Win】+【R】两个按键,打开【运行】输入%localappdata% 2、删除 Iconcache.db 文件 3、在系统管理器里重新启动 Window 资源管理器
Ubuntu 开发环境配置
1、常用软件安装 obsidian vscode typora chrome 等等 2、Java 安装和配置 sudo apt update sudo apt install openjdk-8-jdk sudo apt install openjdk-11-jdk java -version sudo update-alternatives --config java # 环境变量设置 sudo nano /etc/environment JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" source /etc/environment echo $JAVA_HOME
Ubuntu 手动添加应用快捷方式
Ubuntu 手动添加应用快捷方式 在 Ubuntu 20.04(或 20 系列)里创建桌面快捷方式,可以按照以下步骤操作: 1. 创建 .desktop 文件 可以在桌面或者 ~/.local/share/applications/ 目录下新建一个 .desktop 文件,比如: gedit ~/Desktop/myapp.desktop 如果没有 gedit,你可以用 nano、vim,或者在文件管理器右键 -> 新建文档也可以。 2. 填写内容模板 一般一个 .desktop 文件的内容是这样的: [Desktop Entry] Version=1.0 Name=应用名称 Comment=应用描述 Exec=命令或程序路径 Icon=图标路径 Terminal=false Type=Application Categories=Utility; Name:显示在图标下的名字 Comment:悬停时显示的提示文字 Exec:启动程序的命令或脚本路径 Icon:图标路径(可以用 .png 或 .svg 图片) Terminal:是否需要终端窗口运行,通常设为 false Type:通常是 Application Categories:可以简单填个 Utility;,不影响桌面启动 举个例子,比如你要给 Chrome 浏览器创建快捷方式: [Desktop Entry] Version=1.0 Name=Google Chrome Comment=浏览器 Exec=/usr/bin/google-chrome-stable Icon=/usr/share/icons/hicolor/128x128/apps/google-chrome.png Terminal=false Type=Application Categories=Network; 3. 给文件加执行权限 chmod +x ~/Desktop/myapp.desktop 不加权限的话,桌面图标点了会没反应或者提示“不受信任的应用程序”。 ...
requestLayout() 和 invalidate() 作用
requestLayout() 和 invalidate() 是 Android 中 View 类的两个重要方法,用于不同的视图更新场景。让我解释它们的作用和区别: requestLayout() 方法 作用: 请求重新测量和布局整个视图树。 触发视图的 onMeasure() 和 onLayout() 方法。 用于视图的大小或位置发生变化时。 调用时机: 当视图的尺寸需要改变时。 当视图的位置需要改变时。 当视图的子视图发生增删或其布局参数变化时。 例子: button.setVisibility(View.GONE); parentLayout.requestLayout(); invalidate() 方法 作用: 请求重绘视图。 触发视图的 onDraw() 方法。 用于视图的内容或外观需要更新,但尺寸和位置不变时。 调用时机: 当视图的颜色、文本内容等发生变化时。 当需要重新绘制自定义视图的内容时。 动画更新时。 例子: textView.setTextColor(Color.RED); textView.invalidate(); 主要区别: 影响范围: requestLayout(): 可能影响整个视图层次结构的布局。 invalidate(): 通常只影响调用它的视图及其子视图。 性能影响: requestLayout(): 开销较大,因为它可能导致整个视图树的重新测量和布局。 invalidate(): 开销相对较小,通常只涉及重绘。 触发的回调: requestLayout(): 触发 onMeasure() 和 onLayout(),可能还会触发 onDraw()。 invalidate(): 主要触发 onDraw()。 使用场景: requestLayout(): 用于影响视图结构或尺寸的变化。 invalidate(): 用于视图内容或外观的更新。 线程安全: requestLayout(): 可以在非 UI 线程调用。 ...
编译 android 源码找不到 python 方法解决记录
配置 python 安装了 python2 后默认可以使用命令python2 来执行操作,但是一些脚本使用的是python,所以这样会导致脚本执行错误:python: command not found。 这样就需要我们python关联到python2上面。我们可以借助update-alternatives来实现。 比如上面的情况,我们可以设置命令如下。 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 这里面的 python3 看情况而定,这里只是演示。 接着我们就可以使用命令切换我们需要使用的版本了。 sudo update-alternatives --config python 配置 Java 同样我们也可以如法炮制来配置jdk的版本。 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 2 接着选择我们使用的版本即可。 sudo update-alternatives –config java
编译 android 源码错误解决记录
1、提示 BaseTools C Tool binary was not found BaseTools C Tool binary was not found (GenFw) You may need to run: 可以到提示的目录下,执行 make 编译即可。
<uses-library> </uses-library>uses-library <uses-library>标签</uses-library>作用
在 AndroidManifest.xml 文件中,<uses-library> 标签用于声明应用程序依赖于某个外部库。这些库通常是Android系统提供的可选库,而不是应用自身打包的库。通过声明 <uses-library>,你可以确保系统在应用安装时检查该库是否可用,并在缺少该库时阻止应用安装或运行。 常见的用途有依赖某些系统扩展库或平台库,例如 org.apache.http.legacy,可以通过 <uses-library> 声明这个依赖关系: <uses-library android:name="org.apache.http.legacy" android:required="false" /> 属性解释: android:name: 指定依赖库的名称。 android:required: 可选属性,默认为 true,表示该库是必需的。如果设置为 false,即使设备上没有该库,应用仍然可以运行,只不过相关功能可能无法使用。 这个声明在处理不同版本的系统或与系统扩展库集成时非常有用。
Git 取消跟踪文件
要从 Git 中移除已跟踪的文件,同时保持这些文件在本地存在(不删除本地文件),你可以按照以下步骤操作: 更新 .gitignore 文件:确保你已经正确配置了你想忽略的文件或目录。 移除文件的追踪:使用 git rm --cached 来移除已追踪的文件。 git rm -r --cached <file_or_directory> 例如,如果你想移除 .log 文件的追踪: git rm -r --cached *.log 提交更改:移除追踪后需要提交这些更改。 git commit -m "移除已追踪的文件,更新 .gitignore" 推送更改(如果有远程仓库): git push origin <branch_name> 执行以上步骤后,Git 将停止追踪 .gitignore 中定义的文件或目录,但这些文件仍然会保留在你的本地文件系统中。