<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>未分类 on 代码学习站</title><link>https://a6233.com/categories/%E6%9C%AA%E5%88%86%E7%B1%BB/</link><description>Recent content in 未分类 on 代码学习站</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 20 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://a6233.com/categories/%E6%9C%AA%E5%88%86%E7%B1%BB/index.xml" rel="self" type="application/rss+xml"/><item><title>CLion 运行报错解决</title><link>https://a6233.com/posts/clion-%E8%BF%90%E8%A1%8C%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/clion-%E8%BF%90%E8%A1%8C%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3/</guid><description>&lt;p&gt;代码正确，但是一直提示错误&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;undefined reference to `PrintHandler::PrintHandler(Looper*)&amp;#39;
collect2.exe: error: ld returned 1 exit status
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;无意中发现自己运行的是 main.cpp 而不是整个项目，运行整个项目就会正常了。&lt;/p&gt;
&lt;p&gt;具体原因见 AI&lt;/p&gt;
&lt;p&gt;这是一个 &lt;strong&gt;CLion 或 CMake 配置相关的问题&lt;/strong&gt;，不是代码逻辑问题，而是&lt;strong&gt;你在运行 &lt;code&gt;main.cpp&lt;/code&gt; 文件单独作为“单文件运行”时，编译器没有正确链接整个项目的所有 &lt;code&gt;.cpp&lt;/code&gt; 文件&lt;/strong&gt;（例如 &lt;code&gt;Looper.cpp&lt;/code&gt;、&lt;code&gt;PrintHandler.cpp&lt;/code&gt; 等），从而导致：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;undefined reference to `Looper::postMessage(...)`
undefined reference to `vtable for PrintHandler`
...
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="-原因详解"&gt;✅ 原因详解
&lt;/h2&gt;&lt;p&gt;在 &lt;strong&gt;CLion 中点击右键运行 &lt;code&gt;main.cpp&lt;/code&gt; 文件&lt;/strong&gt; 时：&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;它会临时生成一个只编译 &lt;code&gt;main.cpp&lt;/code&gt; 的目标，没有链接你项目中定义的其他源文件（&lt;code&gt;.cpp&lt;/code&gt;），所以报链接错误。&lt;/p&gt;
&lt;p&gt;而你点击的是：&lt;/p&gt;
&lt;h3 id="-右键-maincpp--run-maincpp"&gt;❌ &lt;code&gt;右键 main.cpp → Run main.cpp&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;只运行单文件，不会编译整个项目。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-正确做法"&gt;✅ 正确做法
&lt;/h2&gt;&lt;p&gt;请始终使用：&lt;/p&gt;
&lt;h3 id="-run-employeesystem-或-run-your_target_name"&gt;✅ &lt;code&gt;Run 'EmployeeSystem'&lt;/code&gt; 或 &lt;code&gt;Run '&amp;lt;your_target_name&amp;gt;'&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;也就是你在 &lt;code&gt;CMakeLists.txt&lt;/code&gt; 中通过 &lt;code&gt;add_executable()&lt;/code&gt; 定义的那个目标，例如：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;add_executable(EmployeeSystem
main.cpp
Looper.cpp
Message.cpp
PrintHandler.cpp
...
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在 CLion 里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;点击右上角运行配置的下拉按钮，选择 &lt;code&gt;EmployeeSystem&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;或者点绿色小锤子和绿色三角形按钮来 &lt;code&gt;Build&lt;/code&gt; / &lt;code&gt;Run&lt;/code&gt; 项目&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-避免误操作建议"&gt;✅ 避免误操作建议
&lt;/h2&gt;&lt;p&gt;你可以设置默认只运行 CMake 目标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;打开 &lt;code&gt;Run → Edit Configurations&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;确保你运行的是 &lt;code&gt;CMake Application&lt;/code&gt; 类型（不是 &lt;code&gt;main.cpp&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;删除 &lt;code&gt;main.cpp&lt;/code&gt; 的运行配置（避免误点）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-总结"&gt;✅ 总结
&lt;/h2&gt;&lt;p&gt;操作后果✅ 运行整个项目（CMake目标）正常链接所有模块❌ 只运行 main.cpp缺少链接，报错&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;你项目现在已经没问题了，只是 CLion 使用方式上的误区。后续只运行项目名对应的目标就不会出错了 ✅&lt;/p&gt;</description></item><item><title>Window11 桌面图标变白处理</title><link>https://a6233.com/posts/window11-%E6%A1%8C%E9%9D%A2%E5%9B%BE%E6%A0%87%E5%8F%98%E7%99%BD%E5%A4%84%E7%90%86/</link><pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/window11-%E6%A1%8C%E9%9D%A2%E5%9B%BE%E6%A0%87%E5%8F%98%E7%99%BD%E5%A4%84%E7%90%86/</guid><description>&lt;h3 id="解决方法"&gt;解决方法
&lt;/h3&gt;&lt;p&gt;1、删除 icon 的缓存文件即可。
【Win】+【R】两个按键，打开【运行】输入%localappdata%
2、删除 Iconcache.db 文件
3、在系统管理器里重新启动 Window 资源管理器&lt;/p&gt;</description></item><item><title>Ubuntu 开发环境配置</title><link>https://a6233.com/posts/ubuntu-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</link><pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/ubuntu-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</guid><description>&lt;h3 id="1常用软件安装"&gt;1、常用软件安装
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;obsidian&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vscode&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;typora&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;chrome&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等等&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2java-安装和配置"&gt;2、Java 安装和配置
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;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=&amp;#34;/usr/lib/jvm/java-11-openjdk-amd64&amp;#34;
source /etc/environment
echo $JAVA_HOME
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Ubuntu 手动添加应用快捷方式</title><link>https://a6233.com/posts/ubuntu-%E6%89%8B%E5%8A%A8%E6%B7%BB%E5%8A%A0%E5%BA%94%E7%94%A8%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F/</link><pubDate>Thu, 10 Apr 2025 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/ubuntu-%E6%89%8B%E5%8A%A8%E6%B7%BB%E5%8A%A0%E5%BA%94%E7%94%A8%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F/</guid><description>&lt;p&gt;Ubuntu 手动添加应用快捷方式&lt;/p&gt;
&lt;p&gt;在 Ubuntu 20.04（或 20 系列）里创建桌面快捷方式，可以按照以下步骤操作：&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="1-创建-desktop-文件"&gt;1. 创建 &lt;code&gt;.desktop&lt;/code&gt; 文件
&lt;/h3&gt;&lt;p&gt;可以在桌面或者 &lt;code&gt;~/.local/share/applications/&lt;/code&gt; 目录下新建一个 &lt;code&gt;.desktop&lt;/code&gt; 文件，比如：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gedit ~/Desktop/myapp.desktop
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果没有 &lt;code&gt;gedit&lt;/code&gt;，你可以用 &lt;code&gt;nano&lt;/code&gt;、&lt;code&gt;vim&lt;/code&gt;，或者在文件管理器右键 -&amp;gt; 新建文档也可以。&lt;/p&gt;
&lt;h3 id="2-填写内容模板"&gt;2. 填写内容模板
&lt;/h3&gt;&lt;p&gt;一般一个 &lt;code&gt;.desktop&lt;/code&gt; 文件的内容是这样的：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Desktop Entry]
Version=1.0
Name=应用名称
Comment=应用描述
Exec=命令或程序路径
Icon=图标路径
Terminal=false
Type=Application
Categories=Utility;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Name&lt;/code&gt;：显示在图标下的名字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Comment&lt;/code&gt;：悬停时显示的提示文字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Exec&lt;/code&gt;：启动程序的命令或脚本路径&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Icon&lt;/code&gt;：图标路径（可以用 &lt;code&gt;.png&lt;/code&gt; 或 &lt;code&gt;.svg&lt;/code&gt; 图片）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Terminal&lt;/code&gt;：是否需要终端窗口运行，通常设为 &lt;code&gt;false&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Type&lt;/code&gt;：通常是 &lt;code&gt;Application&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Categories&lt;/code&gt;：可以简单填个 &lt;code&gt;Utility;&lt;/code&gt;，不影响桌面启动&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;举个例子，比如你要给 Chrome 浏览器创建快捷方式：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[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;
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h3 id="3-给文件加执行权限"&gt;3. 给文件加执行权限
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;chmod +x ~/Desktop/myapp.desktop
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;不加权限的话，桌面图标点了会没反应或者提示“不受信任的应用程序”。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="4-信任桌面文件如果需要"&gt;4. 信任桌面文件（如果需要）
&lt;/h3&gt;&lt;p&gt;有时候即使加了执行权限，Ubuntu 桌面也会弹窗警告。这时你可以右键 &lt;code&gt;.desktop&lt;/code&gt; 文件，选择 &lt;strong&gt;允许启动&lt;/strong&gt;（Allow Launching）。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="补充"&gt;补充：
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果是自己写的程序，可以把 &lt;code&gt;Exec&lt;/code&gt; 写成 &lt;code&gt;bash /path/to/your/script.sh&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;图标路径如果找不到，可以自己随便用一张图，或者用系统自带的 &lt;code&gt;/usr/share/icons/&lt;/code&gt; 下的图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果要添加到 &lt;strong&gt;开始菜单&lt;/strong&gt;（应用程序菜单），就把 &lt;code&gt;.desktop&lt;/code&gt; 文件放到 &lt;code&gt;~/.local/share/applications/&lt;/code&gt; 里。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;</description></item><item><title>requestLayout() 和 invalidate() 作用</title><link>https://a6233.com/posts/requestlayout-%E5%92%8C-invalidate-%E4%BD%9C%E7%94%A8/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/requestlayout-%E5%92%8C-invalidate-%E4%BD%9C%E7%94%A8/</guid><description>&lt;p&gt;&lt;code&gt;requestLayout()&lt;/code&gt; 和 &lt;code&gt;invalidate()&lt;/code&gt; 是 Android 中 View 类的两个重要方法，用于不同的视图更新场景。让我解释它们的作用和区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;requestLayout() 方法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;请求重新测量和布局整个视图树。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;触发视图的 onMeasure() 和 onLayout() 方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用于视图的大小或位置发生变化时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;调用时机：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;当视图的尺寸需要改变时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当视图的位置需要改变时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当视图的子视图发生增删或其布局参数变化时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;button.setVisibility(View.GONE);
parentLayout.requestLayout();
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;invalidate() 方法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;请求重绘视图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;触发视图的 onDraw() 方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用于视图的内容或外观需要更新，但尺寸和位置不变时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;调用时机：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;当视图的颜色、文本内容等发生变化时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当需要重新绘制自定义视图的内容时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;动画更新时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;textView.setTextColor(Color.RED);
textView.invalidate();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;主要区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;影响范围：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 可能影响整个视图层次结构的布局。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 通常只影响调用它的视图及其子视图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;性能影响：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 开销较大，因为它可能导致整个视图树的重新测量和布局。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 开销相对较小，通常只涉及重绘。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;触发的回调：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 触发 onMeasure() 和 onLayout()，可能还会触发 onDraw()。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 主要触发 onDraw()。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用场景：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 用于影响视图结构或尺寸的变化。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 用于视图内容或外观的更新。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;线程安全：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 可以在非 UI 线程调用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 只能在 UI 线程调用。（非 UI 线程应使用 postInvalidate()）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际使用示例：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;public class CustomView extends View {
private int mColor;
public void setColor(int color) {
mColor = color;
invalidate(); // 只需要重绘
}
public void setNewSize(int width, int height) {
getLayoutParams().width = width;
getLayoutParams().height = height;
requestLayout(); // 需要重新测量和布局
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 使用 mColor 绘制
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在这个例子中，改变颜色只需要 invalidate()，而改变尺寸则需要 requestLayout()。&lt;/p&gt;
&lt;p&gt;理解这两个方法的区别和适用场景对于优化 Android 应用的性能和创建响应式 UI 非常重要。如果你想了解更多关于如何在复杂场景中使用这些方法，或者需要更多的代码示例，我可以为你提供更详细的信息。&lt;/p&gt;</description></item><item><title>编译 android 源码找不到 python 方法解决记录</title><link>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E6%89%BE%E4%B8%8D%E5%88%B0-python-%E6%96%B9%E6%B3%95%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E6%89%BE%E4%B8%8D%E5%88%B0-python-%E6%96%B9%E6%B3%95%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</guid><description>&lt;p&gt;配置 python&lt;/p&gt;
&lt;p&gt;安装了 python2 后默认可以使用命令&lt;code&gt;python2&lt;/code&gt; 来执行操作，但是一些脚本使用的是&lt;code&gt;python&lt;/code&gt;，所以这样会导致脚本执行错误：&lt;code&gt;python: command not found&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这样就需要我们&lt;code&gt;python&lt;/code&gt;关联到&lt;code&gt;python2&lt;/code&gt;上面。我们可以借助&lt;code&gt;update-alternatives&lt;/code&gt;来实现。&lt;/p&gt;
&lt;p&gt;比如上面的情况，我们可以设置命令如下。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里面的 python3 看情况而定，这里只是演示。&lt;/p&gt;
&lt;p&gt;接着我们就可以使用命令切换我们需要使用的版本了。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo update-alternatives --config python
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="配置-java"&gt;配置 Java
&lt;/h3&gt;&lt;p&gt;同样我们也可以如法炮制来配置&lt;code&gt;jdk&lt;/code&gt;的版本。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;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
​
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;接着选择我们使用的版本即可。&lt;/p&gt;
&lt;p&gt;sudo update-alternatives &amp;ndash;config java&lt;/p&gt;</description></item><item><title>编译 android 源码错误解决记录</title><link>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</guid><description>&lt;p&gt;1、提示 BaseTools C Tool binary was not found&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;BaseTools C Tool binary was not found (GenFw)
You may need to run:
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以到提示的目录下，执行 make 编译即可。&lt;/p&gt;</description></item><item><title>&lt;uses-library&gt; &lt;/uses-library&gt;uses-library &lt;uses-library&gt;标签&lt;/uses-library&gt;作用</title><link>https://a6233.com/posts/uses-library-%E6%A0%87%E7%AD%BE%E4%BD%9C%E7%94%A8/</link><pubDate>Mon, 14 Oct 2024 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/uses-library-%E6%A0%87%E7%AD%BE%E4%BD%9C%E7%94%A8/</guid><description>&lt;p&gt;在 &lt;code&gt;AndroidManifest.xml&lt;/code&gt; 文件中，&lt;code&gt;&amp;lt;uses-library&amp;gt;&lt;/code&gt; 标签用于声明应用程序依赖于某个外部库。这些库通常是Android系统提供的可选库，而不是应用自身打包的库。通过声明 &lt;code&gt;&amp;lt;uses-library&amp;gt;&lt;/code&gt;，你可以确保系统在应用安装时检查该库是否可用，并在缺少该库时阻止应用安装或运行。&lt;/p&gt;
&lt;p&gt;常见的用途有依赖某些系统扩展库或平台库，例如 &lt;code&gt;org.apache.http.legacy&lt;/code&gt;，可以通过 &lt;code&gt;&amp;lt;uses-library&amp;gt;&lt;/code&gt; 声明这个依赖关系：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;uses-library
android:name=&amp;#34;org.apache.http.legacy&amp;#34;
android:required=&amp;#34;false&amp;#34; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;属性解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;android:name&lt;/code&gt;: 指定依赖库的名称。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;android:required&lt;/code&gt;: 可选属性，默认为 &lt;code&gt;true&lt;/code&gt;，表示该库是必需的。如果设置为 &lt;code&gt;false&lt;/code&gt;，即使设备上没有该库，应用仍然可以运行，只不过相关功能可能无法使用。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个声明在处理不同版本的系统或与系统扩展库集成时非常有用。&lt;/p&gt;</description></item><item><title>Git 取消跟踪文件</title><link>https://a6233.com/posts/git-%E5%8F%96%E6%B6%88%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6/</link><pubDate>Mon, 14 Oct 2024 00:00:00 +0000</pubDate><guid>https://a6233.com/posts/git-%E5%8F%96%E6%B6%88%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6/</guid><description>&lt;p&gt;要从 Git 中移除已跟踪的文件，同时保持这些文件在本地存在（不删除本地文件），你可以按照以下步骤操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更新 &lt;code&gt;.gitignore&lt;/code&gt; 文件&lt;/strong&gt;：确保你已经正确配置了你想忽略的文件或目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;移除文件的追踪&lt;/strong&gt;：使用 &lt;code&gt;git rm --cached&lt;/code&gt; 来移除已追踪的文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git rm -r --cached &amp;lt;file_or_directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;例如，如果你想移除 &lt;code&gt;.log&lt;/code&gt; 文件的追踪：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git rm -r --cached *.log
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;提交更改&lt;/strong&gt;：移除追踪后需要提交这些更改。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git commit -m &amp;#34;移除已追踪的文件，更新 .gitignore&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;推送更改&lt;/strong&gt;（如果有远程仓库）：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git push origin &amp;lt;branch_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;执行以上步骤后，Git 将停止追踪 &lt;code&gt;.gitignore&lt;/code&gt; 中定义的文件或目录，但这些文件仍然会保留在你的本地文件系统中。&lt;/p&gt;</description></item></channel></rss>