Android基础支持库
build.gradle文件中添加:
repositories {
mavenCentral()
}
dependencies {
implementation "io.github.daemon369:android-infrastructure:1.0.0"
}可以在https://mvnrepository.com/artifact/io.github.daemon369/android-infrastructure查询最新版本
如果遇到如下错误:
Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option
Adding support for Java 8 language features could solve this issue.
解决方法:
// build.gradle
android {
// ...
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}通用Application实现,应用使用me.daemon.infrastructure.application.InfrastructureApp或其子类来作为自定义Application时,可以简化基础支持库的很多功能的使用
集成android-infrastructure的应用不需要关心FileProvider的问题,库中已做好处理,同时提供以下工具:
| 方法/属性 | 类型 | 是否需要InfrastructureApp支持 |
描述 |
|---|---|---|---|
| val Context.fileProviderAuthority:String | 属性 | 否 | 获取FileProvider对应的authority |
| fun Context.fileToUri(file: File): Uri | 方法 | 否 | 将文件file转化为FileProvider对应的Uri |
| val fileProviderAuthority:String | 属性 | 是 | 获取FileProvider对应的authority |
| fun File.fileToUri(): Uri | 方法 | 是 | 将文件转化为FileProvider对应的Uri |
使用FileProvider需要依赖androidx.core:core库的支持。确保当前应用有导入该库,如果没有,在build.gradle中添加:
repositories {
google()
}
dependencies {
implementation "androidx.core:core:1.6.0"
}如果不需要FileProvider支持,可以关闭该支持:在AndroidManifest.xml中移除该组件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="me.daemon.infrastructure.demo">
<application>
<!-- 添加下面内容以移除基础库提供的FileProvider实现 -->
<provider
android:name="me.daemon.infrastructure.file.FileProvider"
android:authorities="${applicationId}.daemon.fileprovider"
tools:node="remove" />
</application>
</manifest>android-infrastructure中已经配置了如下网络安全配置文件daemon_infrastructure_network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<!-- https://developer.android.com/training/articles/security-config -->
<network-security-config xmlns:tools="http://schemas.android.com/tools">
<base-config
cleartextTrafficPermitted="true"
tools:ignore="InsecureBaseConfiguration" />
<debug-overrides>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>支持明文网络请求,debug模式下支持用户安装的证书
如果不需要,可以在AndroidManifest.xml中覆盖基础库中的配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="me.daemon.infrastructure.demo">
<!-- 添加自定义网络配置文件network_security_config.xml,同时需要添加: tools:replace="android:networkSecurityConfig" -->
<application
android:networkSecurityConfig="@xml/network_security_config"
tools:replace="android:networkSecurityConfig"
>
</application>
</manifest>android-infrastructure支持安装本地APK文件:
| 方法/属性 | 类型 | 是否需要InfrastructureApp支持 |
描述 |
|---|---|---|---|
| fun Context.installPackage(file: File) | 方法 | 否 | 安装APK |
| fun Context.installPackage(filePath: String) | 方法 | 否 | 安装APK |
| fun File.installPackage() | 方法 | 是 | 安装APK |
| fun String.installPackage() | 方法 | 是 | 安装APK |
安装APK需要android.permission.REQUEST_INSTALL_PACKAGES权限,android-infrastructure已经在AndroidManifest.xml中内置该权限,如果不需要可以移除:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="me.daemon.infrastructure.demo">
<!-- 使用`tools:node="remove"`移除不需要的权限 -->
<uses-permission
android:name="android.permission.REQUEST_INSTALL_PACKAGES"
tools:node="remove" />
</manifest>