<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qiantanlong的博客]]></title><description><![CDATA[安卓技术分享]]></description><link>https://blog.youkuaiyun.com/qiantanlong</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qiantanlong]]></copyright><item><title><![CDATA[使用idea生成可执行jar]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/120727442</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/120727442</guid><author>qiantanlong</author><pubDate>Tue, 12 Oct 2021 17:02:34 +0800</pubDate><description><![CDATA[1、新建包含main方法的类





2、设置生成jar的配置
(1)选中项目，右键file，选中Project Struture





(2)选择Artifacts，配置创建jar的来源









(3)输出jar的路径





3、编译生成jar




4、查看生成的jar文件




5、然后我们cmd进去当前目录，执行java -jar TestJar.jar执行当前jar包（前提是配置jdk），如图可见，我们的jar已经可以正常执行了。

6、在jar所在目录，...]]></description><category></category></item><item><title><![CDATA[ERROR: Failed to parse XML in D:\MyAPP\XXXX\app\src\main\AndroidManifest.xml]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/115962778</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/115962778</guid><author>qiantanlong</author><pubDate>Wed, 21 Apr 2021 16:48:25 +0800</pubDate><description><![CDATA[ERROR: Failed to parse XML in D:\MyAPP\XXXX\app\src\main\AndroidManifest.xml
ParseError at [row,col]:[21,13]
Message: expected start or end tag
Affected Modules: app

这个报错指向很明确，就是AndroidManifest文件的21行，13列有错误，所以一定要仔细看一看，不要怀疑studio，怀疑studio出问题了，会迷失方向的。



原因]]></description><category></category></item><item><title><![CDATA[Ubuntu安装Android Studio和SVN配置]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/115404763</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/115404763</guid><author>qiantanlong</author><pubDate>Fri, 02 Apr 2021 17:42:10 +0800</pubDate><description><![CDATA[Ubuntu安装Android Studio和SVN配置

Java jdk的配置
在/home/hongzhen/目录下新增Java目录，下载Java的Linux包，放到/home/hongzhen/Java目录下。

执行tar zxvf jdk-8u172-linux-x64.tar.gz Java ，解压到Java目录。



配置环境变量
执行sudo vim /etc/profile命令，在末尾追加Java的配置。

export JAVA_HOME=/home/hongzhen/java/jd]]></description><category></category></item><item><title><![CDATA[Ubuntu配置Java环境]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/115403945</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/115403945</guid><author>qiantanlong</author><pubDate>Fri, 02 Apr 2021 17:16:41 +0800</pubDate><description><![CDATA[Ubuntu配置Java环境

下载Java的jdk文件，一定要是Linux版本的




在用户的工作目录下创建java目录mkdir java，切换到Java目录，解压jdk文件到当前目录，tar zxvf jdk-8u172-linux-x64.tar.gz




配置环境变量
sudo vim /etc/profile

这里需要输入密码，打开后在末尾添加Java环境变量。











export JAVA_HOME=/home/hongzhen/java/jdk1.8.0_...]]></description><category></category></item><item><title><![CDATA[Could not create task ‘:app:minifyAlimsReleaseWithR8‘.]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/113575513</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/113575513</guid><author>qiantanlong</author><pubDate>Tue, 02 Feb 2021 22:20:01 +0800</pubDate><description><![CDATA[这个报错的原因是缺少对应的SDK编译工具版本，查看compileSdkVersion: 29和buildToolsVersion: "29.0.3",然后打开SDK manger查看对应的29 SDK platform进行安装，重新进行编译即可解决问题。


]]></description><category></category></item><item><title><![CDATA[Ubuntu20.4安装SVN后检出项目报错Error validating server certificate for]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/113245120</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/113245120</guid><author>qiantanlong</author><pubDate>Wed, 27 Jan 2021 11:49:19 +0800</pubDate><description><![CDATA[Ubuntu20.4安装SVN后，第一次使用AndroidStudio检出项目时报错，无法连接到指定SVN项目路径，但是项目地址检查是没有问题的，SVN服务也没有问题，可以尝试通过命令行来操作，切换到命令窗口，执行检出项目的命令。此时发现报错如下，意思是证书有问题，询问你（R） 弹出、临时接受（t）还是永久接受（p），此时输入p就可以进入输入用户名密码的步骤。再次到AndroidStudio中检出项目就正常了，AndroidStudio检出报错，如果没有明确的报错信息，可以通过命令行来查看并...]]></description><category></category></item><item><title><![CDATA[Ubuntu20安装搜狗拼音输入法]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/113196955</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/113196955</guid><author>qiantanlong</author><pubDate>Tue, 26 Jan 2021 21:53:01 +0800</pubDate><description><![CDATA[添加中文语言支持，如果安装系统时已经选择了中文，可以忽略

打开 系统设置——区域和语言——管理已安装的语言——在“语言”tab下——点击“添加或删除语言”





弹出“已安装语言”窗口，勾选中文（简体），点击应用



回到“语言支持”窗口，在键盘输入法系统中，选择“fcitx”





注意：如果在键盘输入法系统中，没有“fcitx”选项时，建议先打开终端手动安装fcitx：

第一步：执行sudo apt-get install fcitx安装fcitx输入法系统，默认是ibus。这一步也可..]]></description><category></category></item><item><title><![CDATA[Android X升级处理方案]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/113128087</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/113128087</guid><author>qiantanlong</author><pubDate>Mon, 25 Jan 2021 18:01:59 +0800</pubDate><description><![CDATA[Android X升级处理方案

AndroidX介绍
从 API 28（Android 9.0，Pie）开始，Google 推荐开发者从原来的各种支持库转移到一个新版本的名为 AndroidX 的支持库。它相比老支持库（android.support.v7或android.support.v4）有着无需操心版本控制、实时更新的优点。原有的支持库将被保留并且可以继续使用，但接下来所有新的支持都将发布在 AndroidX 上。

迁移准备
AndroidX的迁移要求在在AndroidStudio 3.2 或更]]></description><category></category></item><item><title><![CDATA[Ubuntu常用软件安装]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/113043075</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/113043075</guid><author>qiantanlong</author><pubDate>Sat, 23 Jan 2021 13:37:24 +0800</pubDate><description><![CDATA[视频播放：

smplayer

sudo apt-get install smplayer

vlc

sudo apt-get install vlc
]]></description><category></category></item><item><title><![CDATA[Ubuntu安装中文语言和拼音输入法]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/111155879</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/111155879</guid><author>qiantanlong</author><pubDate>Mon, 14 Dec 2020 11:41:54 +0800</pubDate><description><![CDATA[Ubuntu安装中文语言和拼音输入法

介绍ibus
Ibus是输入法框架（常见的还有fcitx框架），不通的输入法框架需要不同的输入法程序，Ibus是Ubuntu系统自带的。搜狗拼音和百度拼音是基于fcitx框架的，如果想要使用搜狗拼音需要单独安装fcitx框架。

设置中文语音支持
Ubuntu默认没有启动中文语言支持，需要进行设置和安装必要的中文组件。

第一步：安装中文语言包









以上步骤忽略了安装的进度，安装过程需要几分钟时间，因网络情况而已。



第二步：设置中文语言



..]]></description><category></category></item><item><title><![CDATA[VMware安装Ubuntu虚拟机及使用SecureCRT连接]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/110441667</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/110441667</guid><author>qiantanlong</author><pubDate>Tue, 01 Dec 2020 17:37:13 +0800</pubDate><description><![CDATA[在VMware中安装Ubuntu系统

 安装过程，自行百度，需要特别注意的是设置Ubuntu的网络连接模式为bridge（桥接模式），否则同在局域网的其他主机，无法连接Ubuntu系统。在这种模式下，VMware虚拟出来的操作系统就像是局域网中的一台独立的主机，它可以访问网内任何一台机器。需要手工为虚拟系统配置IP地址、子网掩码，而且还要和宿主机器处于同一网段，这样虚拟系统才能和宿主机器进行通信。同时，由于这个虚拟系统是局域网中的一个独立的主机系统，那么就可以手工配置它的TCP/IP配置信息，以...]]></description><category></category></item><item><title><![CDATA[VMware安装Centos7虚拟机及使用SecureCRT连接]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/110388906</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/110388906</guid><author>qiantanlong</author><pubDate>Mon, 30 Nov 2020 15:15:10 +0800</pubDate><description><![CDATA[在VMware中安装Centos7系统
 安装过程，自行百度，需要特别注意的是设置Centos7的网络连接模式为bridge（桥接模式），否则同在局域网的其他主机，无法连接Centos7系统。在这种模式下，VMware虚拟出来的操作系统就像是局域网中的一台独立的主机，它可以访问网内任何一台机器。需要手工为虚拟系统配置IP地址、子网掩码，而且还要和宿主机器处于同一网段，这样虚拟系统才能和宿主机器进行通信。同时，由于这个虚拟系统是局域网中的一个独立的主机系统，那么就可以手工配置它的TCP/IP配置信息...]]></description><category></category></item><item><title><![CDATA[安卓textview为指定文本变色]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/109687783</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/109687783</guid><author>qiantanlong</author><pubDate>Sat, 14 Nov 2020 10:51:22 +0800</pubDate><description><![CDATA[为了强调特定的文本内容，需要对关键字变色、加粗等操作，使用Html可以实现这个效果。



 代码比较简单：


private String str = "天啊，我今天真的很高兴，今天天气很好，干好事天天";

private void logIndex(String key) {
        String textStrBlue = "&lt;font color=\"#0000ff\"&gt;&lt;strong&gt;";
        String endBlue = "&lt;/stro.]]></description><category></category></item><item><title><![CDATA[安卓线程同步方案]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/109492493</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/109492493</guid><author>qiantanlong</author><pubDate>Wed, 04 Nov 2020 16:12:47 +0800</pubDate><description><![CDATA[public class ThreadTest {
    private Object lock = new Object();
    public void threadRunFirst() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                threadRunSecond();
                synchronized..]]></description><category></category></item><item><title><![CDATA[RecycleView使用EditText的数据和焦点错乱问题解决方案]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/108709516</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/108709516</guid><author>qiantanlong</author><pubDate>Mon, 21 Sep 2020 14:20:32 +0800</pubDate><description><![CDATA[RecycleView是常用的列表控件，在日常的开发中使用频率很高，使用起来很方便，只要设置好条目布局和数据就可以完美的展示数据。EditText是常用的输入控件，用于用户的数据输入。二者本来各自使用都很容易，但是如果放到一起就出现问题，条目的复用导致EditText输入的内容出现错乱，焦点的获取也混乱了，令很多新手大为头疼。

基本的思路是要在条目的可见和隐藏时处理好焦点的问题，要将操作的EditText的位置坐标记录下来，进行有效管理，还有将输入框的显示和隐藏也管理起来。解决的代码本身并不复杂，注释也标]]></description><category></category></item><item><title><![CDATA[Glide加载OkHttp框架https协议的图片]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/108535809</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/108535809</guid><author>qiantanlong</author><pubDate>Fri, 11 Sep 2020 15:42:39 +0800</pubDate><description><![CDATA[Glide是支持加载https协议图片的，需要自定义GlideModule的实现类，将OkHttp框架实现了https协议的OkHttpClient配置进去。我测试的Glide版本是3.7.0，Okhttp3的版本是3.4.1，核心的类只有三个供大家参考。


public class GlideModuleForOkHttps implements GlideModule {
    @Override
    public void applyOptions(Context context, Glide]]></description><category></category></item><item><title><![CDATA[获取手机已安装的APP的信息，包括APK文件数据]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/108530730</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/108530730</guid><author>qiantanlong</author><pubDate>Fri, 11 Sep 2020 11:21:58 +0800</pubDate><description><![CDATA[这个功能在华为手机上测试了，其他机型不确定是不是可以啊。核心的工具类贴处理，列表展示相关的自行编写。


public class ApkInfoManager {
    private static ApkInfoManager appInfoManager;

    private ApkInfoManager() {

    }

    public static ApkInfoManager getInstance() {
        if (appInfoManager ==...]]></description><category></category></item><item><title><![CDATA[Python数据格式转换]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/108478141</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/108478141</guid><author>qiantanlong</author><pubDate>Tue, 08 Sep 2020 21:53:10 +0800</pubDate><description><![CDATA[函数
			描述
		int(x [,base])
			将x转换为一个整数
		long(x [,base] )
			将x转换为一个长整数
		float(x)
			将x转换到一个浮点数
		complex(real [,imag])
			创建一个复数
		str(x)
			将对象 x 转换为字符串
		repr(x)
			将对象 x 转换为表达式字符串
		eval(str)
			用来计算在字符串中的有效Python表达式,并返回一个对象
		tuple(s)
			将序列 s 转换为一个元]]></description><category></category></item><item><title><![CDATA[Python格式化输出]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/108429291</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/108429291</guid><author>qiantanlong</author><pubDate>Sun, 06 Sep 2020 11:30:07 +0800</pubDate><description><![CDATA[%用法


name = "QianTanLong"
age = 34
weight = 75.5
stu_id = 1

1、整数的输出

%o —— oct 八进制
%d —— dec 十进制
%x —— hex 十六进制


print("八进制%o" % age)
print("十进制%d" % age)
print("十六进制%x" % age)

输出：

八进制42
十进制34
十六进制22

2、浮点数输出

%f ——保留小数点后面六位有效数字
　　%.3f，保留3位小数位
%e ——保留]]></description><category></category></item><item><title><![CDATA[RecyclerView实现拖动调整Item位置，侧滑删除Item功能]]></title><link>https://blog.youkuaiyun.com/qiantanlong/article/details/107430816</link><guid>https://blog.youkuaiyun.com/qiantanlong/article/details/107430816</guid><author>qiantanlong</author><pubDate>Sat, 18 Jul 2020 16:40:06 +0800</pubDate><description><![CDATA[实现长按条目调整位置和侧滑删除功能，核心是ItemTouchHelper类，直接贴代码了。


DefaultItemTouchHelper


public class DefaultItemTouchHelper extends ItemTouchHelper {
    private DefaultItemTouchHelperCallback mDefaultItemTouchHelperCallback;
    private OnItemMoveListenter itemMoveListe]]></description><category></category></item></channel></rss>