学习视频

https://www.bilibili.com/video/BV13y4y1E7pF

项目结构说明

gradle.properties

1
2
3
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true # 是否使用 AndroidX
android.enableJetifier=true

签名证书

app/build.gradle android 中添加如下配置,证书文件 bjtcrj.keystore 放在该 build.gradle 同级目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
signingConfigs {
config {
keyAlias 'bjtcrj'
keyPassword 'bjtcrj'
storeFile file('bjtcrj.keystore')
storePassword 'bjtcrj'
v1SigningEnabled true
v2SigningEnabled true
}
}

buildTypes {
debug {
signingConfig signingConfigs.config
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
signingConfig signingConfigs.config
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

切换到主线程「UI 线程」

方法一

1
2
3
4
5
6
7
//Activity 页面代码中
runOnUiThread(new Runnable() {
@Override
public void run() {
//操作 UI 代码
}
});

方法二

1
2
3
4
5
6
7
8
9
10
11
12
//普通 Java 代码中
if (Looper.myLooper() != Looper.getMainLooper()) {
//如果不在主线程,则切换到主线程
Handler mainThread = new Handler(Looper.getMainLooper());
mainThread.post(new Runnable() {
@Override
public void run() {
//操作 UI 代码
}
});
return;
}

drawable 文件夹图片适配

https://blog.csdn.net/xuaho0907/article/details/72848520

Android 平台启动图使用.9.png 图片

https://ask.dcloud.net.cn/article/35527

获取签名证书 SHA1

1
2
keytool -v -list -keystore  xxx.jks
//输入密码,回车

申请相机权限

  • app/build.gradle

    1
    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
  • java 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //Android 6.0的版本以上
    final RxPermissions rxPermissions = new RxPermissions(this);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    rxPermissions.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
    .subscribe(granted -> {
    if (granted) {
    // All requested permissions are granted
    } else {
    // At least one permission is denied
    }
    });
    }

Android 平台启动图使用.9.png 图片

https://ask.dcloud.net.cn/article/35527

问题

提示不安全的访问

解决:在 AndroidManifest.xml 中 application 节点配置android:usesCleartextTraffic="true"

AndroidSupport到AndroidX库冲突记录

问题:Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.5.0-rc01-runtime.jar (androidx.core:core:1.5.0-rc01) and support-compat-27.1.1-runtime.jar

解决:gradle.properties文件添加配置

1
2
android.useAndroidX=true
android.enableJetifier=true

无法解析io.fabric.tools:gradle:1.+

解决:**app/build.gradle**

1
2
3
4
5
6
7
 buildscript { 
repositories {
maven { url https://maven.fabric.io/public } # 新增
mavenCentral()
jcenter()
}
}

Cannot resolve method 'subscribe(<lambda expression>)'

UTOOLS1576652496797.png

解决:修改app build.gradle

1
2
3
4
5
6
7
8
//新增代码
//RxJava的依赖包
implementation 'io.reactivex.rxjava2:rxjava:2.0.3'
//RxAndroid的依赖包
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

//已有代码
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'

No implementation found for int com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass

问题可能是:百度 BaiduLBS_Android.jar 包和 so文件不是同一套文件

Android SDK 版本号与 API Level 的对应关系及发布时间

最新安卓版本对照表,API对照表,持续更新_android api 34-CSDN博客

平台版本号 API 级别 VERSION_CODE(代号) 发布时间

1
2
3
4
5
6
7
8
9
10
11
12
Android 10.0     29     Android 10     2019 年 09 月
Android 9.0 28 Pie/P(馅饼) 2018 年 08 月
Android 8.1 27 Oreo/O_MR1(奥利奥) 2017 年 12 月
Android 8.0 26 Oreo/O(奥利奥) 2017 年 08 月
Android 7.1.1 25 Nougat/N_MR1(牛轧糖) 2016 年 10 月
Android 7.0 24 Nougat/N(牛轧糖) 2016 年 08 月
Android 6.0 23 Marshmallow/M(棉花糖) 2015 年 10 月
Android 5.1 22 Lollipop_MR1(棒棒糖) 2015 年 03 月
Android 5.0 21 Lollipop/L(棒棒糖) 2014 年 11 月
Android 4.4W 20 KITKAT_WATCH 2014 年 06 月
Android 4.4 19 KitKat(奇巧) 2013 年 10 月
Android 4.3 18 Jelly Bean_MR2(果冻豆) 2013 年 07 月