Skip to content

Latest commit

 

History

History
619 lines (469 loc) · 25.9 KB

File metadata and controls

619 lines (469 loc) · 25.9 KB

[TOC]

Java基础

Android基础知识

View

自定义View

View的事件体系

view的事件体系五部曲

事件分发机制

Fragment

  • Fragment详解
    • 1、《Fragment详解之一——概述》
    • 2、《Fragment详解之二——基本使用方法》
    • 3、《Fragment详解之三——管理Fragment(1)》
    • 4、《Fragment详解之四——管理Fragment(2)》
    • 5、《Fragment详解之五——Fragment间参数传递》
    • 6、《Fragment详解之六——如何监听fragment中的回退事件与怎样保存fragment状态》
  • Fragment的四种跳转
    • 1、从同一个Activiy的一个Fragment跳转到另外一个Fragment
    • 2、从一个Activity的Fragment跳转到另外一个Activity
    • 3、从一个Activity跳转到另外一个Activity的Fragment上
    • 4、从一个Activity的Fragment跳转到另外一个Activity的Fragment上
  • YoKeyword/Fragmentation

    A powerful library that manage Fragment for Android!

    特性

    1、可以快速开发出各种嵌套设计的Fragment App

    2、悬浮球/摇一摇实时查看Fragment的栈视图Dialog,降低开发难度

    3、增加启动模式、startForResult等类似Activity方法

    4、类似Android事件分发机制的Fragment回退方法:onBackPressedSupport(),轻松为每个Fragment实现Back按键事件

    5、提供onSupportVisible()等生命周期方法,简化嵌套Fragment的开发过程; 提供统一的onLazyInitView()懒加载方法

    6、提供 Fragment转场动画 系列解决方案,动态更换动画

    7、更强的兼容性, 解决多点触控、重叠等问题

    8、支持SwipeBack滑动边缘退出(需要使用Fragmentation_SwipeBack库,详情README)

Android源码

VLC有关问题

  1. vlc无法全屏的问题解决方案

    https://code.videolan.org/videolan/libvlc-android-samples/-/blob/5c9c1ccd860f6ae1560fb1f159a6a592d6855e7d/java_sample/src/main/java/org/videolan/javasample/JavaActivity.java

    https://www.programcreek.com/java-api-examples/?code=KKorvin/uPods-android/uPods-android-master/app/src/main/java/com/chickenkiller/upods2/fragments/FragmentVideoPlayer.java

    注:首推第一个

Android项目重构

Android项目快速开发

开源框架学习

Dagger2

Android常见问题

  • Fragment懒加载和ViewPager的坑

    参考资料:http://www.cnblogs.com/dasusu/p/5926731.html

  • Activity嵌套多个fragment时,onResume的处理

    解决方法:
    不在fragmentA的onResume里写,而改成下面这样写,不可见时不操作,可见时再操作。

参考资料:http://blog.csdn.net/binbin_1989/article/details/64437995

    @Override  
    public void onHiddenChanged(boolean hidden) {  
       super.onHiddenChanged(hidden);  
     
        if (hidden) {  
            UtilsTools.Log_e(TAG, " --- 不可见()");  
        } else {  
            initData();  
            UtilsTools.Log_e(TAG, " --- 当前可见()");  
        }  
}

Android开发细节问题

  • 人民币符号适配(主要是¥中划线一横与两横的问题)

    char cny = (char)165;
    
  • 关于数据库的操作,由于默认每次写操作(读操作可以不用)都会开启一个事务,大量数据的写操作需要用开启事务避免每次写操作都创建一个事务以提高app性能 最常见的场景:for循环插入数据库execSQL,需要开启事务。 伪代码:

    db.beginTransaction(); //手动设置开始事务 try{ //批量处理操作 for(Collection c:colls){ insert(db, c); } db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交。 //在setTransactionSuccessful和endTransaction之间不进行任何数据库操作 }catch(Exception e){ MyLog.printStackTraceString(e); }finally{ db.endTransaction(); //处理完成 }

  • 比较两个List集合中相同(不同)元素性能最高的方法 参考文章:获取两个List中的不同元素,4种方法,逐步优化,学习使用

  • Butterknife出现Bindview空指针异常主要有2个问题点需要排查: 1.butterknife的gradle配置有问题; 2.butterknife的binding过程是顶级布局往下一层一层绑定,一旦parent id绑定失败(一般是类型转换错误),该父布局的子布局所有view都会绑定失败,error log通常只会提示子view的空指针异常,需要继续往上查找log查看父布局哪个view类型转换异常。

  • xshell执行远程虚拟机上的程序,需要xshell退出后远程虚拟机上的程序继续在后台执行 1.nohup ./Demo.sh &

  • Activity切换动画实现,以及黑屏问题解决

  • Java调用kotlin扩展函数报参数错误解决方案(vararg)

    //文件名为ViewKt.kt
    fun Activity.setOnClickListener(listener: View.OnClickListener, vararg ids: Int) {
        for (id in ids) {
            findViewById<View>(id).setOnClickListener(listener)
        }
    }
    
    ViewKt.setOnClickListener(
        this,
        new OnFastDoubleClickListener(this),
        R.id.album_btn,
        R.id.capture_btn);

权限问题

 /**
 * 检查权限是否被授予,此方法主要针对checkSelfPermission总是返回PERMISSION_GRANTED的问题
 * @param permission
 * @param context
 * @return
 */
public static boolean selfPermissionGranted(String permission, Context context) {
	// For Android < Android M, self permissions are always granted.
	boolean result = true;
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
		if (getTargetSdkVersion(context) >= Build.VERSION_CODES.M) {
			// targetSdkVersion >= Android M, we can
			// use Context#checkSelfPermission
			result = context.checkSelfPermission(permission)
					== PackageManager.PERMISSION_GRANTED;
		} else {
			// targetSdkVersion < Android M, we have to use PermissionChecker
			result = PermissionChecker.checkSelfPermission(context, permission)
					== PermissionChecker.PERMISSION_GRANTED;
		}
	}
	return result;
}

public static int getTargetSdkVersion(Context context) {
	int targetSdkVersion = 0;
	try {
		final PackageInfo info = context.getPackageManager().getPackageInfo(
				context.getPackageName(), 0);
		targetSdkVersion = info.applicationInfo.targetSdkVersion;
	} catch (PackageManager.NameNotFoundException e) {
		e.printStackTrace();
	}
	return targetSdkVersion;
}

Paint画文字时文字居中显示

git常用命令

git push origin eas_local:eas_sync
git checkout -b eas_local origin/eas_sync
git pull
git pull origin eas_sync:eas_local
git pull origin master:dev
git checkout -b dev//基于本地创建分支
git checkout -b dev origin/dev //基于远程分支创建本地分支
git clone https://git.oschina.net/telneter/iscs_calendar.git
git checkout -b eas_local
git pull origin eas_sync:eas_local
git push origin eas_local:eas_sync

git打tag

git tag
git tag -a v1.4 -m 'my version 1.4'
git show v1.4
参考:[Git 基础 - 打标签](https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE)

git同步远程已删除的分支和删除本地多余的分支

[git同步远程已删除的分支和删除本地多余的分支](https://www.cnblogs.com/saysmy/p/9166331.html)
git remote prune origin

git上库指导

1. git init
2. git add .
3. git commit -am "###"      -------以上3步只是本地提交
4. git remote add origin git@xx.xx.xx.xx:repos/xxx/xxx/xxx.git
5. git push origin 本地分支:远程分支

git clone远程分支资源太大总是失败?

1. git clone -b 远程分支名 远程库url --depth 1   //仅下载最新版本的代码
[现象] git clone 一个大的项目时失败,错误类似fatal: The remote end hung up unexpectedly | fatal: early EOF | fatal: index-pack failed
[原因]项目过大,受硬件限制(类似过载保护),clone过程中会中断
[解决]   a、先做一个浅:git clone --depth 1 <repo_URI>;
	    b、将浅repo回复完全:git fetch --unshallow
	    c、then do regular pull :git pull --all

注:参考连接:git&gerrit 使用过程中遇到的问题及解决方法

git分支dev同步master分支代码

分两步走:
   1.git checkout dev
   2. git merege origin/master

git同步代码仓并保留提交记录

cd existing_repo
git remote rename origin old-origin
git remote add origin http://172.16.90.180/netposa_whapp/vid.git
git push -u origin --all
git push -u origin --tag

git代码已push到服务器,如何进行回退

a、在client 端撤消错误的提交:回到之前的一个提交
git reset --hard HEAD^
b、将新的提交 强制推到 git 服务器上:
git push -f origin master

github访问速度太慢解决方案

adb命令

  • ADB 清除Android手机缓存区域日志 adb logcat -c -b main -b events -b radio -b system adb logcat -c

  • ADB logcat 过滤方法(抓取日志) adb logcat | grep -–color=auto $pid

  • Android PC端用ADB抓取指定应用日志

    1. 查看所有应用pid

    adb shell ps

    1. 查看指定应用的pid

    adb shell "ps | grep com.antelope.app"

  • 在windows上不能使用grep关键字,而是应该用findstr

    如何只查看某个app日志的方法

    1. adb shell pm list packages -3 查看非系统第三方应用包名

    2. adb shell ps | findstr vchat.A 查看包名进程

    3. 根据进程来查看过滤app的日志

    ​ adb logcat | findstr vchat.A

    注:CHCP 65001就设置成utf-8编码的了

  • 查看log并保存到本地

    1. adb logcat -c

    2. adb logcat |find "13696" > C:\Users\Admin\Desktop\aaaa.txt

  • Android adb push后相册没有立马更新,需要刷新media库

adb push C:\Users\ygq\Pictures\123.jpg sdcard/DCIM

adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/DCIM/123.jpg

Gradle

gradle和gradlew的区别

gradlew命令会执行gradle-wrapper.properties中的gradle版本,gradle命令必须指定某个版本,而gradle会经常升级,所以最好用gradlew命令

发布开源库到Jcenter

踩坑记录

  • 开了ss后发现依然没法上传到https://bintray.com/,此时需要在Projectgradle.properties中添加以下proxy内容

    systemProp.http.proxyHost=127.0.0.1
    systemProp.http.proxyPort=1080
    systemProp.https.proxyHost=127.0.0.1
    systemProp.https.proxyPort=1080
  • 多Module Project需要单独发布某一个module时Gradle>ModuleName>Tasks>publishing>bintrayUpload即可单独发布某一个module

https://bintray.com/ username yeguoqiang6 apikey 1809887721a2eee40615c2faf30e495136c6f8ed

源码学习

Flutter

工具的使用

Charles抓https请求的爬坑路

第一步:Android安装Charles证书(华为手机测试)

​ 注意:可以使用电脑浏览器访问chls.pro/ssl,下载charles-proxy-ssl-proxying-certificate.pem文件然后adb push到sd卡

第二步:Charles抓https显示unknown解决方法

​ 注意:Charles的SSL Proxying Settings,添加所有的域名这一步一定要有,否则就算信任了证书也全都是unknown

第三步:如何解决 Android7.0之后部分手机无法抓包 ​ 注意:关键代码

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>

Android 7.0以上抓取Https请求还需要添加网络安全配置网络安全配置,具体可以参考网络安全配置

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
   				 ... >
   	 ...
    </application>
</manifest>

其中network_security_config.xml具体为以下内容

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
   	 <trust-anchors>
   		 <certificates src="user" />
   	 </trust-anchors>
    </base-config>
</network-security-config>

科学上网

  • PAC过滤规则

    "github.com",
    "gist.github.com",
    "assets-cdn.github.com",
    "raw.githubusercontent.com",
    "gist.githubusercontent.com",
    "cloud.githubusercontent.com",
    "user-images.githubusercontent.com",
    "camo.githubusercontent.com",
    "avatars0.githubusercontent.com",
    "avatars1.githubusercontent.com",
    "avatars2.githubusercontent.com",
    "avatars3.githubusercontent.com",
    "avatars4.githubusercontent.com",
    "avatars5.githubusercontent.com",
    "avatars6.githubusercontent.com",
    "avatars7.githubusercontent.com",
    "avatars8.githubusercontent.com",
    "github-cloud.s3.amazonaws.com",
    "stackoverflow.com",
    "flutter.dev"
  • https://github.com/bannedbook/fanqiang

  • 【简单稳定】Vultr的购买和SS + v2ray-plugin +BBR的部署教程

  • 使用Vultr自带的Snapshots为VPS更换IP

  • 自建v2ray服务器教程

  • https://ssr.tools/1026 https://tlanyan.me/v2ray-clients-download/

    https://tlanyan.me/v2ray-tutorial/

    https://tlanyan.me/v2ray-clients-download/

  • https://github.com/233boy/v2ray/wiki

    bash <(curl -s -L https://git.io/v2ray.sh)
    v2ray info 查看 V2Ray 配置信息
    v2ray config 修改 V2Ray 配置
    v2ray link 生成 V2Ray 配置文件链接
    v2ray infolink 生成 V2Ray 配置信息链接
    v2ray qr 生成 V2Ray 配置二维码链接
    v2ray ss 修改 Shadowsocks 配置
    v2ray ssinfo 查看 Shadowsocks 配置信息
    v2ray ssqr 生成 Shadowsocks 配置二维码链接
    v2ray status 查看 V2Ray 运行状态
    v2ray start 启动 V2Ray
    v2ray stop 停止 V2Ray
    v2ray restart 重启 V2Ray
    v2ray log 查看 V2Ray 运行日志
    v2ray update 更新 V2Ray
    v2ray update.sh 更新 V2Ray 管理脚本
    v2ray uninstall 卸载 V2Ray
    
    # firewalld放行端口(适用于CentOS7/8)
    firewall-cmd --permanent --add-port=23581/tcp # 23581改成你配置文件中的端口号
    firewall-cmd --reload
    # ufw放行端口(适用于ubuntu)
    ufw allow 23581/tcp # 23581改成你的端口号
    # iptables 放行端口(适用于CentOS 6/7)
    iptables -I INPUT -p tcp --dport 23581 -j ACCEPT
    # 设置开机启动
    systemctl enable v2ray
    # 运行v2ray
    systemctl start v2ray
  • 自建ss服务器教程

  • 自建ss服务器教程

    脚本一:CentOS 6和7/Debian6+/Ubuntu14+ ShadowsocksR一键部署管理脚本

    yum -y install wget
    
    wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh && chmod +x ssr.sh && bash ssr.sh
    

    脚本二:谷歌BBR加速

    yum -y install wget
    
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
    
    chmod +x bbr.sh
    
    ./bbr.sh
    

    查看加速bbr进程

    • 输入命令lsmod | grep bbr 如果出现tcp_bbr字样表示bbr已安装并启动成功
  • 电脑共享科学上网给手机,谷歌验证通过

    1、ss客户端选项设置-本地代理-勾选“允许来自局域网的连接”

    2、手机连接此电脑共享的wifi

    3、连接好之后长按此wifi,勾选“显示高级选项”

    4、代理服务器选择“手动”

    5、代理主机名填写你自己电脑的ip地址,代理端口一般是1080

    6、连接上之后,电脑上务必关掉防火墙!我就因为没关防火墙浪费半天时间!

    7、如果你的电脑可以爬梯,那么手机应该也就没问题了。

    参考:http://www.samsungmembers.cn/thread-255981-29-15.html

  • vps地址:https://www.vultr.com