做好的App,首要的第一件事当然就是拿来分(zhuang)享(bi)了,也就是说要做得有模有样,能发布到app市场上,能真正安装到手机上 ,这样才有成就感。
既然要这样的话,那么自然就不是‘摇晃手机’那么简单了。
因为我只亲自做过Android应用上的打包,IOS暂时还没做过,所以就不多说了。
RN的默认图标,就是一个android机器人大头贴,这看起来一点都不酷,既然想要酷,那就只有我们动手了。
android平台上的图标没有IOS那么多规矩,所以比较简单。
第一步,找一张你认为觉得酷的图片,为了更好的效果,建议分辨率要高、宽高比最好保持为1
第二步,根据这张图片,导出最起码4种尺寸的图标
至于为什么要4种,请看项目目录project\android\app\src\main\res
,在这个文件夹里,以mipmap-
开头的文件夹一共有四个,也就是对应4种大小的图标,尺寸分别为h:72x72 m:48x48 xh:96x96 xxh:144x144
,想要一个好的效果的话,你所需要导出的4张图标,尺寸就必须严格依照这四种。
第一步只能靠自己发挥想象了,第二步的图标导出就需要借助工具了,事实上如果真的是为了好的效果,第一步就应该动用一些什么工具的,比如PS之类,但这毕竟不是程序员擅长的活,而且我们的重点也不是这个,效果达到了就好,能省事就省事。
图标导出的方法也很多,比如使用PS工具,到 这个,或者 这个 网站上看一看,基本可以满足要求。
但这未免还是有些麻烦,简单起见的话,完全可以在线上传、导出,简单胜利,百度一下即可,这种网站很多,无需注册、无需认证,一键上传下载,一分钟绰绰有余,有的甚至可以一次性帮你导出几十种尺寸的图标。
拿到了图标之后,想要将图标应用到手头的app上,方法有两种。
第一种在项目的R.java
文件里面设置,这里不太推荐,如果不懂java
的话,改错了什么东西可不好办。
第二种就简单了,直接到这个project\android\app\src\main\res
文件夹中,依次打开那四个以mipmap-
开头的文件夹,将里面原先的大头贴删除,然后将你自己的四张图片依次放进去。
这里需要注意的是,图片的尺寸要对应,然后替换完图片之后,将图片的名字改成和原先一样的,也就是ic_launcher.jpg
到了这里,图标的事情,就算是解决了
关于如何打包apk,有两种方法。
第一是使用Android Studio,不过网上关于如何使用Android Studio打包RN应用,大多数都存在一个致命的问题,那就是Android Studio的版本不一致,RN官网上对于Android Studio的要求是2.0版本以上,这个版本的操作步骤,显然和大部分网上所说的那些Android Studio的版本,最起码在如何打包RN应用这方面,有不小的出入。
不过好在还有第二条路,不用开IDE,直接命令行走起。
关于这种方法,其实RN官网上已经说得很清楚了,不过因为是英文,所以有些英文基础不太好的人,可能会看得不太清楚,这里我就根据我的实践来说一下吧
做过Android开发的人,对于这一步肯定很熟悉了,想要你的app能够以发布版本的身份,用正常的方式安装到手机中,甚至是发布到app市场上,那么这一步很关键。
- 既然能够开发RN,那说明相应的Java环境肯定是装好了,如果你在配置Java环境的时候,一路默认安装,那么直接进入
C:\Program Files\Java\jdkx.x.x_x\bin
如果你将Java的根目录设置到了憋得地方,那也没关系,同样是到你的Java安装目录下找到\jdkx.x.x_x\bin
这个文件夹,其中jdkx.x.x_x
代表JDK的版本好,如果你当初没有对这个文件夹重命名的话,那么这个文件夹的名字就像这样:\jdk1.8.0
,总之是jdk
开头,后面的数字可能不一样,这个没关系
- 进入到了’\jdkx.x.x_x\bin’之后,在这个目录中打开控制台,输入
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
其中my-release-key
这个名字可以自己取名,同时my-key-alias
也是自己取名,其中第二个名称alias
参数后边的别名,在后面你在为应用签名的时候需要用到,所以暂时记录一下这个别名
这里需要提醒下,当你按照控制台指示输入密钥的时候,你已经确信自己已经按下了按键,但是控制台上的光标却没有往后移,并没有显示你刚才输入的字母,不要急不要怕,其实你已经输入了,只是没有显示出来让你看到而已,只要你确信自己真的输入了就行,继续往下输,别管它有没有显示,输完按回车,你就会看到控制台让你再输一遍刚才的密钥了,就把刚才输入的密钥再输一遍,只要两遍输得都一样,肯定会让你过的
接下来控制台又会继续输入一些问题,用来确认你的身份, 以及生成密钥证书所用,如果你只是自己玩玩的话,没想过要真的发布到app市场上,那么随便输,别客气,想叫什么名字就叫什么名字,拉风一点的最好。
敲完之后,如果一切正常,你将看到控制台输出:
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
........
输入的密钥口令
(如果和密钥库口令相同, 按回车):
[正在存储my-release-key.keystore]
然后你可以看到,在你当前目录下,多出了一个以keystore
结尾的文件,比如我这里是my-release-key.keystore
,那就是刚才所生成的密钥证书.
这就表明,签名算是弄好了。
在你的项目根目录下,进入
/android/app
这个文件夹,将刚才生成my-release-key.keystore
剪切到这个目录里来
在你的项目下,进入/anddriod
文件夹,里面有个gradle.properties
文件,用编辑器打开,随便找个地方在里面添加下面这几句代码:
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****
其中,将两个*****
替换成你之前在控制台中输入的密钥口令
在你的项目根目录下,打开android/app/build.gradle
这个文件,将下面这几句代码添加进去:
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...
其中,只有:
signingConfigs {
release {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
还有
signingConfig signingConfigs.release
这两段才是真正你所需要添加进去的内容。
之前测试所生成的app,app名字的后半段都是带有debug
,这表明App是测试版本的,而只有经过了打包步骤后,才会生成真正的release
版本App
在你的项目根目录,进入
/android
文件夹,打开控制台,输入:
gradlew assembleRelease
这一步就是编译生成发布版本的App,时间可能比较久,如果你发现控制台长时间不动,先别急着按Ctrl+C
,再耐心等一下,
反正我是等了15分钟的。。。
当你看到BUILD SUCCESSFUL
这句话的时候,恭喜你,终于编译好了。
到了这里,其实整个打包过程就完成了,打开android\app\build\outputs\apk
文件夹,你会发现里面多出了一个名字以release
作为后半段的apk文件,这就是最终打包出来的apk了。
不过,照例还是需要测试一番的。
还是在你的项目根目录,进入
/android
文件夹,打开控制台,输入:
gradlew installRelease
这会将发布版本的app安装到你的手机上,安装完成后,需要你自己在手机上点开,然后就能体验你的app在真实发布环境下的表现了。
使用git init
下来的RN框架中,可能包含了一些你在项目中并不需要的部分,所以这一步可以帮你剥离掉那些你并不需要的文件代码,压缩最终APK的体积。
这一步很简单,打开android/app/build.gradle
文件,在里面将def enableProguardInReleaseBuilds = false
改成
def enableProguardInReleaseBuilds = true
不过RN官网上说,这一步可能会出些问题,所以做完这一步后,尽可能对App做一个彻底的测试。