Deepin系统add-apt-repository失败的问题
不只是安装software-properties-common那么简单……
问题目前Deepin系统版本为15.11,貌似在15.10时切到了Debain的软件仓库,而不再是Ubuntu了,虽说比较稳定,但还不够新,比如git,版本就没有官方的新。于是我尝试 git官方的办法:
1sudo add-apt-repository ppa:git-core/ppa
报错,提示未找到命令。
解决这个问题在网上搜搜办法,很多回答都是让安装一个包:
1sudo apt-get install software-properties-common
是的,确实解决了 add-apt-repository 命令找不到的问题,但实际add仓库源时,还是会出错,你可能会看到如下内容:
Traceback (most recent call last): File “/usr/bin/add-apt-repository”, line 95, in sp = SoftwareProperties(options=options) Fi ...
Gradle命令编译失败NoClassDefFoundError和VerifyError
问题不知道大家在编译gradle项目的时候习惯直接在Android Studio这种IDE里面还是命令行操作。今天在Deepin系统里面用命令编译:
1./gradlew assembleDebug
直接报错:
Exception in thread “main” java.lang.NoClassDefFoundError: org.gradle.wrapper.BootstrapMainStarter at java.lang.Class.initializeClass(libgcj.so.17) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)Caused by: java.lang.VerifyError: verification failed at PC 96 in org.gradle.wrapper.BootstrapMainStarter:start(([Ljava.lang.String;Ljava.io.File;)V): incompatible type ...
Deepin标题栏太高的解决办法(自定义高度)
Deepin 15.11已经发布一段时间了,前段时间折腾了一下,把我的Ubuntu换成了Deepin(有兴趣可以看看我的另一篇:Deepin15.11初体验及问题解决),总体感觉非常好。依我个人习惯,目前有两点不是很能接受:
第一就是软件源貌似是debian stable的,所以很多软件版本比较老,比如git版本,远低于官方版本,这个还是有一些解决办法的,具体的我就没去折腾了,Deepin官方主要可能还是考虑兼容性和稳定性吧。
第二就是UI,默认的主题其实还是很好看的,但唯一不能接受的就是标题栏太高而且还不能提供修改的方法。
默认的标题栏在系统的一些界面里还是很好看很契合的,可一旦到了三方软件上,就惨不忍睹了。我量了一下足足占了40像素,又要少看两行代码了哈哈哈!我更希望它只有24像素,就像这样:
解决办法其实不止我一个人,很多用户也在官方issue里吐槽了,所以早就有了解决办法。1、先创建一个目录,如果有就不用了:
1234# 如果你是用的默认的白色主题mkdir -p ~/.local/share/deepin/themes/deepin/light# 如果你用的黑色主题mkd ...
Deepin15.11初体验及问题解决
Deepin发展也有不少年了,最近还和华为的笔记本合作预装。之前我一直都用Ubuntu做日常开发,现在心血来潮也想折腾一下Deepin哈哈,本文主要讲从Ubuntu无痛迁移到Deepin的安装过程、N卡显卡驱动等一系列小坑的解决。权当总结吧!
下载和制作启动盘这个就不讲了哈,直接在官网下就行了,包括启动盘制作工具。http://www.deepin.org/download/
保留数据从Ubuntu迁移到Deepin操作系统先说一下我的Ubuntu分区挂载情况:我单独挂载了/home和/efi,除此之外都分给了/,平时的重要文件都在home里面,这样在装其他Linux时也方便。
进入Deepin的安装分区步骤时:
依然挂载/home到原来的/home上面,且千万不要选择格式化;
然后由于我之前的Ubuntu就是UEFI启动方式,所以同样挂载/efi覆盖原来的,这个可以格式化;
最后剩余空间挂载/,并选择格式化,界面上还会提示你Deepin会安装到这里。
重点: 在填用户名时一定要和之前Ubuntu的不一样,这 ...
Docker安装Ubuntu镜像并保存且修改IP及Mac地址
本文仅作为一个Docker入坑笔记。主要介绍:1、Docker在Linux上的安装配置;2、在Docker容器中安装一个Ubuntu镜像并保存更改;3、以任意IP地址和Mac地址启动刚才安装的Ubuntu镜像。
运行环境简介一下我的环境,方便参考:Linux 4.15.0-64-generic #73~16.04.1-Ubuntu SMP Fri Sep 13 09:56:18 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Docker安装配置无论何时,都要先找官方文档,对于入门来说,这比任何东西都管用。这里以Ubuntu为例,其他系统类似。起手update源:
1sudo apt-get update
装一些必要的工具(一般来说不是刚装系统的话,都可以略过此步):
123456sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
添加官方ke ...
OkHttp自定义重试拦截器出现IllegalStateException: cannot make a new request……异常
问题OkHttp自定义重试拦截器常见实现方式:
12345678910111213private static class RetryInterceptor implements Interceptor { @Override public okhttp3.Response intercept(Chain chain) throws IOException { int retryCount = 0; Request request = chain.request(); okhttp3.Response response = chain.proceed(request); while (!response.isSuccessful() && retryCount < RETRY_MAX_COUNT) { retryCount++; response = chain.proceed(request); } ...
Ubuntu安装Source Insight导入Android源码并设置仿IDEA主题Darcula
预览先来张图给大家感受下效果,然后我再慢慢道来过程,保证你避免每一步的坑。
我们要做什么1、由于Source Insight(以下简称SI)是Windows应用,所以不能直接安装在Linux上,于是我们要借助wine,所以第一步会介绍wine的安装过程和坑;2、介绍SI在Linux(以Ubuntu 16.04为例)上的安装,并介绍如何导入免费证书(个人建议大家有条件还是付费支持一下SI这个软件,真的是个好东西,比IDEA看源码实在快太多了,我已经买了最新版4.0,还是挺良心的,一次性付费,239美刀);3、用SI导入AOSP源码并Sync文件建立索引,开头那张截图就是正在Sync,建立完成后就可以快速导航各个方法类引用等等了;4、默认主题太刺眼,怎么办?还是习惯IDEA的风格,没事,我配置都写好了,只用你一键导入并改改字体大小即可!
第一步:安装wine直接命令走起:
1sudo apt-get install wine
过程中终端会显示一个确定页面,按Tab键选中并确定即可,然后再选“是”。一般来说由于依赖问题,上述命令都是不能一次性安装成功的,这时候直接:
1sudo apt-ge ...
Kotlin操作符快速获取爸爸的儿子的狗的名字
NPE(NullPointerException)是最低级且也最容易犯的错,也是最喜欢遇到的Bug因为好解。本文适合Kotlin入门萌新食用,大佬轻喷哈哈哈!
问号N连帮你空处理(?)假如服务端返回一个json嵌套了各种数据,映射成POJO大概是这样:
123456789101112// 此处为简洁省去getter和setterpublic class TestParent { private TestChild child; public class TestChild { private List<TestDog> dogs; public class TestDog { private String name; } }}
然后,你为了知道他爸的儿子的第一条狗叫啥名,你需要这样:
123456789101112if (parent != null) { // 有爹 TestParent.TestChild ch ...
OkHttp拦截器实现禁止一切网络请求
我们在创建OkHttp客户端时,可以添加各种拦截器,这是我见过最有可玩性的库之一:
123456OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .addInterceptor(new XXXInterceptor()) .addInterceptor(new YYYInterceptor()) .... .build();
设想这么一个场景,用户有一个开关,可以允许或禁止应用内的一切网络请求,如何用拦截器来实现?为了不让大家觉得我又在水贴,直入主题。我们可以通过构造一个404的response来拦截请求:
12345678910111213141516private static class NetworkInterceptor implements Interceptor { @Override public okhttp3.Response interc ...
OkHttp拦截器实现无网络时加载缓存,避免Unknown host异常
我们在创建OkHttp客户端时,可以添加接口数据缓存,真的很香:
123456File cacheDir = ... // 缓存目录,可以是内部存储也可以是外部存储的目录OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .cache(new Cache(cacheDir, 20 * 1024 * 1024)) // 这里给了20MB缓存目录容量,超过后会自动清理 .... .build();
然后我们会发现,先正常请求网络数据,然后断开网络连接,重新请求,并没有返回缓存。而是出现一些诸如“Unknown host…”解析不了域名这种异常,查看之前设置的缓存文件目录,也确实有文件,可怎么就不加载呢?哦,结果还要配置一下缓存策略,回到我们的主题:拦截器。我们可以在拦截器中实现网络连接判断并强制开起缓存:
12345678910111213141516private static class Cach ...
OkHttp拦截器获取GET/POST请求参数并添加公共参数
我们在创建OkHttp客户端时,可以添加各种拦截器,真的很香:
123456OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .addInterceptor(new XXXInterceptor()) .addInterceptor(new YYYInterceptor()) .... .build();
服务端经常需要我们做一些参数校验的工作,需要在本地先把请求参数封装起来再加密之类的,那么我们可以用拦截器来实现获取所有get或post参数,还可以添加一些公共参数,这样就不用在每个接口定义那去加了:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354private static class ParamsInterceptor impl ...
微信小程序任务栈实现原理
背景之前面试一些校招同学,聊到微信小程序是什么launchMode,其任务栈是如何实现的?很多同学只提到singleInstance,这是不合适的。今天我们就猜测并解析一下微信主程序与小程序的关系与大致实现,最后给出源码,可以给大家作一个简单参考。
初探既然要研究微信,那么我们就先打开几个小程序,再用adb命令看看任务栈信息。在终端使用 adb shell dumpsys activity activities 命令后,可以找到最近任务列表的Activity信息:
12345678910Running activities (most recent first): TaskRecord{caccd90 #3239 A=.AppBrandUI3 U=0 StackId=1 sz=1} Run #4: ActivityRecord{bb162b8 u0 com.tencent.mm/.plugin.appbrand.ui.AppBrandUI3 t3239} TaskRecord{d6c62d6 #3190 A=com.tence ...
NDK开发中为什么除以0程序不崩溃?
我们都知道不管是在Java还是在C++程序中,下面这段代码都会导致程序错误:
123int x = 10;int y = x / 0;...
但是我今天发现了一个比较神奇的事情,把这段代码写成native方法后在Java层调用,竟然没有导致App崩溃,代码是这样子的:
12345678910111213141516#include <jni.h>#include "logger.h"#ifdef __cplusplusextern "C" {#endifJNIEXPORT void JNICALL test_crash(JNIEnv *env, jobject /* this */) { int x = 10; int y = x / 0; LOGD("crash %d", y);}#ifdef __cplusplus}#endif
Java层很简单,我保证没有try-catch,而且Log打印出来y的值竟然是0,这完全颠覆我三观。怀疑人生的我把这两行关 ...
源码茶舍之android:externalService是什么属性?实现原理?
发现在AndroidManifest中声明Service时,偶然发现一个布尔类型的属性:android:externalService示例如下:
123<service android:externalService="true" ... />
如果minSDK小于24,会显示警告,很显然这是一个24以后的新东西。先顾名思义一下,external的service,外置(外挂)的服务?它和 android:exported 以及 android:isolatedProcess 属性是什么关系?
初探先谷歌一下,再百度一下,无果。竟然没有一个人解释这是什么东西,这更加激发了我的好奇心。马上去Android官网搜,搜到service标签的文档,心中窃喜:https://developer.android.com/guide/topics/manifest/service-element翻完整个文档,发现居然也没有 android:externalService 的说明,难道是太新了忘了补充文档吗?不过我们可以从中先复习一下 android:exp ...
MyBatis中插入(insert)后返回主键(key)的注解方式
一般我们插入数据后需要知道其自增的主键key是多少,有两种方式:
用@Options注解:比如这里有个订单(Order)相关的DAO:
12345public interface OrderDao { @Insert("INSERT INTO ...") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") void insertOrder(Order order);}
这里的keyProperty表示对象中的成员变量,keyColumn表示数据库中的列名,因此我们这里数据库主键名称就是id ,其实此处不写keyColumn也是可以的,因为我们只是读不是写。此外,如果你Order实体中主键名称就叫”id”的话,keyProperty也不用写了。实体类则如下:
1234public class Order { private long id; ...}
最后通过 orde ...