Hilt 使用

配置:
1、应用build.gradle目录下
dependencies {
classpath “com.android.tools.build:gradle:4.2.2”
classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”
classpath “com.google.dagger:hilt-android-gradle-plugin:$hilt_version”
}
2、app的build.gradle下
plugins {
id ‘com.android.application’
id ‘kotlin-android’
id ‘kotlin-kapt’
id ‘dagger.hilt.android.plugin’
}
dependencies下增加

implementation “com.google.dagger:hilt-android:$hilt_version”
kapt “com.google.dagger:hilt-android-compiler:$hilt_version”

异常处理:
检查APP下gradle是否设置
defaultConfig {
applicationId “com.edutech.kotlinappexample”
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName “1.0”
javaCompileOptions{
annotationProcessorOptions{
arguments += [
“room.schemaLocation” : “$projectDir/schemas”.toString(),
“room.incremental” : “true”,
“room.expandProjection”: “true”]
}
}
testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner”
}
这个arguments要设置为 +=

Mac AndroidStudio 报connectrefused错误

首先看下Gradle Scripts里面的 gradle.properties是否有设置代理,有的话删除,然后再尝试,如果不行请按下面步骤
1、检查gradle.properties看下该文件下是否有设置代理;
2、preferences-》Appearance & Behavior->System Settings ->Http Proxy看下是否设置了代理,将配置的代理删掉;
3、网络高级选项,看下是否有代理,有的话关闭;
最后删掉.gradle文件,关闭AndroidStudio,重启AndroidStudio

Android Webview访问不安全链接

WebViewClient实现下面方法
@Override
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
// super.onReceivedSslError(webView, sslErrorHandler, sslError);
if( sslErrorHandler!=null) {
sslErrorHandler.proceed();
}
}

\\s+

split(“\\s+”) 按空格,制表符,等进行拆分
(也就是说它是按空白部分进行拆分,不管这个空白使用设么操作留下
的,提如空格键 tab键)
split(” +”) 按空格进行拆分(也就是说只有按空格键流出来的空白才会是拆分的一句)

Android 获取已连接热点的设备信息

private static final String IP_CMD = “ip neighbor”;
private void getConnectInfo() {
BufferedReader reader = null;

try {
Process ipProc = Runtime.getRuntime().exec(IP_CMD);
ipProc.waitFor();
if (ipProc.exitValue() != 0) {
throw new Exception(“Unable to access ARP entries”);
}

reader = new BufferedReader(new InputStreamReader(ipProc.getInputStream(), “UTF-8”));
String line;
while ((line = reader.readLine()) != null) {
String[] neighborLine = line.split(“\\s+”);

// We don’t have a validated ARP entry for this case.
if (neighborLine.length <= 4) { continue; } String ipaddr = neighborLine[0]; InetAddress addr = InetAddress.getByName(ipaddr); if (addr.isLinkLocalAddress() || addr.isLoopbackAddress()) { continue; } String macAddress = neighborLine[4]; } } catch (Exception e) { } }

Android随识

1.https://github.com/KeepSafe/ReLinker
这个可以出来安装过程中加载库异常问题:Caused by: java.lang.UnsatisfiedLinkError;
2.https://github.com/Tencent/MMKV
这个保存临时数据可以使用到

Android Autosize息屏造成页面布局混乱问题

应用为横屏时,切到其他应用再切回/息屏之后再切回等情况可能会造成页面混乱。
处理办法:
Manifest中对应Activity添加:
android:configChanges=”keyboardHidden|orientation|screenSize”
Activity:
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
AutoSize.autoConvertDensityOfGlobal(this); //如果没有自定义需求用这个方法
} else {
}
}

Dagger2相同实例多个对象

Module:注入对象的集合
1、注入相同实例的多个对象的方法
Module中用Named()来区分,然后在需要用的地方用对应Named()来标识;
Module 中:
@Provides
@Named(“Demodagger2Action”)
String provideActionValue() {
return action;
}
@Provides
@Named(“demoBean”)
DemoBean provideDemoBean() {
return demoBean;
}
类中:
@Inject
public DemoDagger2(@Named(“Demodagger2Action”) String action,
@Named(“Demodagger2NewAction”) String newAction,
@Named(“demoBean”)DemoBean demoBean) {
this.action = action;
this.newAction = newAction;
this.demoBean = demoBean;
}
或:
@Inject
@Named(“demoBean”)
DemoBean demoBean;

Android ANR文件分析

1、ANR文件第一个“main”线程是否有提示具体问题,如果有的话根据对应提示找到代码;
2、锁问题:ANR文件第一个”main”中如果有保护“mutator lock” shared held,这个可能是主线程中加了锁,而且与其他线程锁产生死锁等问题造成,然后根据下面文件找到项目中出问题的代码文件。这种大概率是Handler处理主线程与其他线程时造成了死锁。