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。此目录下有两个文件夹debugrelease,分别放着各自的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下这么操作github

    subprojects {
        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签名修改会对微信支付有影响,会出现无法调起,解决方式就是退出微信重新登录,或者删除微信重新下载。