andoid开发规范
开发规范
- 统一Android Studio版本
- 统一Gradle版本
- 统一转化为Androidx
- 引入的第三方包不要使用+
- 统一签名文件
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 100000
- git/svn忽略文件
- .gradle和.idea文件,这是AS自己生成的文件
- local_properties
- *.iml
- app/build
- build
打包
生成签名文件
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 100000
my-release-key.keystore
是生成的签名文件名。
my-key-alias
是别名。
100000是有效时间,2048是RSA加密的大小。JKS 密钥库使用专用格式。建议使用
keytool -importkeystore -srckeystore demo-release-key.keystore -destkeystore demo-release-key.keystore -deststoretype pkcs12
迁移到行业标准格式 PKCS12。
设置配置文件
android/app/build.gradle
signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } release { storeFile file('my-release-key.keystore') //需要放在当前目录下,否则就用绝对路径 storePassword '123456' keyAlias 'my-key-alias' keyPassword '123456' } } buildTypes { debug { signingConfig signingConfigs.debug } release { // Caution! In production, you need to generate your own keystore file. // see https://facebook.github.io/react-native/docs/signed-apk-android. signingConfig signingConfigs.release //初始化这里是debug需要改一下 minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } }
用指令打包
cd android && ./gradlew assembleRelease
gradlew
是android下的一个文件,assembleRelease
是参数。
打包后的目录是android/app/build/outputs/apk
。此目录下有两个文件夹debug
和release
,分别放着各自的apk。
keytool指令
keytool -help
命令:
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令
转换为Androidx
打开AS,Refactor=>Migrate to AndroidX,如果报错,先把引入的第三方包注释掉;
当出现如下类似错误
Could not resolve androidx.core:core:1.0.1.
你可以在android/build.gradle
下这么操作githubsubprojects { project.configurations.all { resolutionStrategy.eachDependency { details -> if (details.requested.group == 'androidx.core' && !details.requested.name.contains('androidx')) { details.useVersion "1.0.1" } } } }
转换之可能找不到一些类,如
错误: 程序包android.support.annotation不存在
解决方式:
import android.support.annotation.Nullable; //替换为 import androidx.annotation.Nullable;
gradle版本5.x导致的
Cannot add task 'wrapper' as a task with that name already exists
task wrapper(type: Wrapper) {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
改成
wrapper {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
Android签名修改
Android签名修改会对微信支付有影响,会出现无法调起,解决方式就是退出微信重新登录,或者删除微信重新下载。