Flutter Mac环境修改图标、应用名称、包名等下打包APK ABB

540 阅读3分钟

在Flutter中,并没有统一地修改图标、应用名称和包名的地方,所以要在各自语言对应的地方进行修改:

包名
Android 是在 android ▸ app ▸ srcmain ▸ AndroidManifest.xml 中修改package="xxx.xxx.xxx";
以及在 android ▸ app ▸ src ▸ build.gradle中修改applicationId "xxx.xxx.xxx";
并且需要修改android ▸ app ▸ srcmain ▸ ...... ▸ MainActivity.java对应的包路径
iOS 在 ios ▸ Runner ▸ Info.plist 中修改CFBundleIdentifier对应的Value

写法与原生相同,并且可以不一致。

PS:不推荐修改包名,包名最好在项目开始时定下...之后修改可能会出点什么小问题...

应用名称
Android 是在 android ▸ app ▸ srcmain ▸ AndroidManifest.xml 中修改android:label="XXX";
iOS 在 ios ▸ Runner ▸ Info.plist 中修改CFBundleName对应的Value
图标
Android 在android ▸ app ▸ src ▸ res ▸ mipmap-... 文件夹中替换相应图片
iOS 在 ios ▸ Runner ▸ Assets.xcassets ▸ AppIcon.appiconset文件夹中替换相应尺寸的图片, 如果使用不同的文件名,那还必须更新同一目录中的Contents.json文件。
启动图片
Android 在android ▸ app ▸ src ▸ res ▸ drawable ▸ launch_background.xml 通过自定义drawable来实现自定义启动界面。
iOS 在 ios ▸ Runner ▸ Assets.xcassets ▸ LaunchImage.imageset文件夹中替换相应尺寸的图片, 如果使用不同的文件名,那还必须更新同一目录中的Contents.json文件。

其他方式
可以使用Xcode打开ios文件夹下的Runner.xcworkspace项目,像原生项目一样修改。

打开终端生成签名文件
keytool -genkey -v -keystore ~/sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  yuanzhiying
您的组织单位名称是什么?
  [Unknown]:  gongsi
您的组织名称是什么?
  [Unknown]:  gongsi
您所在的城市或区域名称是什么?
  [Unknown]:  beijing
您所在的省/市/自治区名称是什么?
  [Unknown]:  beijing
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CN
CN=yuanzhiying, OU=gongsi, O=gongsi, L=beijing, ST=beijing, C=CN是否正确?
  [否]:  Y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
     CN=yuanzhiying, OU=gongsi, O=gongsi, L=beijing, ST=beijing, C=CN
[正在存储/Users/yuanzhiying/sign.jks]

查看生成的签名文件

keytool -list -v -keystore sign.jks
输入密钥库口令:  <输入密钥>

在Android Studio中flutter项目目录/android/app下创建文件夹key,将生成的sign.jks文件拖放到key文件夹下。

image.png

Flutter获取SHA1

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
keytool -list -v -keystore /Users/nnianhou/Documents/sign.jks

此时生成的签名没有md5,输入以下命令得到md5:

keytool -exportcert -keystore /Users/nnianhou/Documents/sign.jks | openssl dgst -md5

输入密钥库口令: xxxx
58e6606788b733d9b3d4fe999911244e

在flutter项目目录android下创建文件key.properties,并添加以下内容:

storePassword=123456
keyPassword=123456
keyAlias=sign
storeFile=key/sign.jks

打开/android/app/build.gradle文件,添加以下内容

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

image.png

在android {}这一行找到内部以下相似代码

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }

将其替换为

    signingConfig{
        release{
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.release
        }
    }
打包

可以打包两种文件:APK和AAB(google最新推荐,但是部分应用商城不支持)
打包APK
在android studio项目下的terminal中,执行打包命令:

flutter build apk

image.png

打包AAB
flutter build appbundle