第一行代码(十五)

第十五章的主要内容是 App 应用的一些收尾工作,比如打包,上架之类的事情。

一、生成正式签名的 APK 文件

  AndroidStudio 将应用程序安装到手机的流程:首先将程序代码打包成一个 APK 文件,然后将文件传输到手机上,最后再执行安装操作。Android 系统会将所有的 APK 文件识别成应用程序的安装包,类似于 Windows 系统上的 .exe 文件。
  但是并不是所有的 APK 文件都能成功安装到手机上,Android 系统要求只有签名后的 APK 文件才可以安装,那为什么通过 AndroidStudio 运行程序的时候并没有进行签名操作?因为Android Studio 使用了一个默认的 keystore 文件帮我们自动进行了签名。

查看默认 keystore 文件图1

  双击它
查看默认 keystore 文件图2

  我们通过 Android Studio 来运行的程序都是用这个 debug.keystore 文件来进行签名的。那么如何生成一个正式的签名呢?

使用Android Studio生成

  使用 Android Studio 来生成正式签名的 APK 文件。


生成签名文件图1

生成签名文件图2

生成签名文件图3

生成签名文件图4

生成签名文件图5

生成签名文件图6

生成签名文件图7

使用 Gradle 生成

  我们还可以使用 Gradle 方式来生成。编辑 app/build.gradle 文件

android {
    ...
    signingConfigs{
        config{
            storeFile file('F:/workspace/demo/CoolWeather/coolweather.jks')
            storePassword '123456'
            keyAlias 'coolweather'
            keyPassword '123456'
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //别忘了这一行,添加签名配置
            signingConfig signingConfigs.config
        }
    }
    ...
}

  配置完成,如何生成 APK 文件呢?

使用 Gradle 方式签名

  想要哪个就双击哪个,哪里不会点哪里。成功后 APK 文件会自动生成在 app/build/outputs/apk 目录下

生成的 APK 文件如果有一个包含 unaligned 字样,表示是没有经过对齐的 APK 文件,我们直接忽略它就可以了。

  这里还有个小细节了解一下,目前 keystore 文件的所有信息都是以明文的形式直接配置在 build.gradle 中的,这样不太安全,Android 推荐的做法是将这类敏感数据配置在一个独立的文件里面,然后再 build.gradle 中去读取这些数据。


keystore配置图1

  修改该文件

KEY_PATH=F:/workspace/demo/CoolWeather/coolweather.jks
KEY_PASS=123456
ALIAS_NAME=coolweather
ALIAS_PASS=123456

  然后修改 app/build.gradle 文件

    signingConfigs{
        config{
            storeFile file(KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
        }
    }

  我们只需要将 gradle.properties 文件保护好久行了,比如从 Git 版本控制中排除。

二、生成多渠道 APK 文件

  比如我们准备要生成 360 和百度两个渠道的 APK 文件,修改app/build.gradle文件

android {
  ...
    defaultConfig {
        applicationId "com.coolweather.android.coolweather"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        jackOptions.enabled = true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    productFlavors{
        qihoo{
            applicationId "com.coolweather.android.coolweather.qihoo"
        }
        baidu{
            applicationId "com.coolweather.android.coolweather.baidu"
        }
    }
  ...
}

注意: Gradle 中的配置规定不能以数字开头,因此我将 360 的渠道配置成了 qihoo。渠道名的闭包中可以覆写 defaultConfig 中的任何一个属性,比如说这里讲 applicationId 属性进行了覆写,那么最终生成的各渠道 APK 文件的包名也各不相同。

  假如我们需要对不同的渠道编写差异性需求。在 app/src 目录下(main的平级目录)新建一个 baidu 目录,然后再 baidu 目录下在新建 java 和 res 两个目录。


image.png

  这样我们就可以编写百度渠道特有的功能了,如果需要覆写 AndroidManifest 文件中的内容,还可以在 baidu 目录下再新建一个 AndroidManifest.xml 文件。我们这里演示一下给不同渠道的 APK 起一个不同的应用名字吧。
  应用名之前是定义在 main/res/values/string.xml 文件中的,我们在 baidu 目录下也建立一个相同的目录结构,然后进行修改:

<resources>
    <string name="app_name">酷欧百度版</string>
</resources>

  然后生成多渠道 APK 文件,观察右侧工具栏的 Gradle Tasks 列表,你会发现里面多出了几个新的 Task。

image.png

  如果需要生成百度渠道的 APK 文件,就执行 assembleBaidu,同理想生成 360 渠道的 APK 文件,就执行 assembleQihoo,如果想一次性生成所有渠道的 APK 文件,就执行 assembleRelease。除了 Gradle 方式生成之外,还可以使用 Android Studio 提供的可视化工具也能生成多渠道的 APK 文件。
image.png

  生成后,就可以通过adb install命令将生成好的 APK 文件安装到模拟器上。
adb install APK文件路径

注意:因为我们在 productFlavors 中覆写了各渠道的 applicationId 属性,保证每个 APK 文件的包名都不相同,因而它们可以安装到同一个设备上面。

三、上架360市场

  360应用商店的地址是:http://dev.360.cn,首先你要注册,然后登陆,然后根据步骤来进行上架,这里就不赘述了。

注意:360应用商店有个特殊需求,是需要对 APK 进行加固,在上架页面 360 会帮我们将 APK 进行加固并生成一个新的 APK 文件,但是这个加固后的文件是没有经过签名的,我们需要下载下来进行重新签名。
  遗憾的是,Android Studio 中没有提供对未签名的 APK 直接进行签名的功能,我们只能使用 jarsigner 命令来进行签名:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [keystore 文件路径] -storepass [keystore 文件密码] [待签名 APK 路径] [keystore 文件别名]
将[]中的描述替换成 keystore 文件的具体信息就能签名成功了,注意[]符号是不需要的。

四、嵌入广告进行盈利

  谷歌充分考虑到了可以在 Android 应用程序中嵌入广告来让开发者获得收入,在国内,这一领域做的比较好的移动广告平台不少,个人认为腾讯广告联盟(原广点通)特别专业。
  网址是:http://e.qq.com/dev/index.html,你需要先注册账号,然后填写一些个人信息。待他审核通过后,我们就可以进入腾讯广告联盟的后台,给我们的应用添加广告,首先进入媒体管理界面,新建媒体,填写应用相关信息,注意这里需要填写一个详情页地址,我们可以使用360应用商店上的详情页地址,打开http://zhushou.360.cn,搜索我们的 app,就能找到该地址了。
  填写完成后,我们需要下载 Android SDK,在此期间,如果我们的审核通过后,可以在媒体管理界面查看新建媒体的状态,注意,这里自动生成了一个应用 ID,稍后会用到。
  然后点击新建广告位,就可以创建一个广告位了,创建完成后,进入广告位管理界面,能看到我们刚刚新建的广告位了,同样,广告位 ID 也是我们稍后会用到的。
  以上工作都完成后,我们开始接入 SDK,现将 jar 包复制到你的项目中,然后根据文档来进行剩下的操作。
  接入完成后,我们要重新发布一下应用,修改一下app/build.gradle文件。

image.png

  然后进行更新上架。此后,每当有用户观看或点击了应用程序中的广告时,我们就能真正地得到收益,在腾讯广告联盟的后台管理界面可以查看每天的收益情况。

五、结束语

  已经接近尾声了,通过这一系列的学习,只能说你具备了一定的 Android 开发技术,但并不是说你就已经成为一个出色的 Android 开发者,你必须还要通过不断的努力和学习来充实完善自己。因为 Android 的世界还很大很深很广。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,442评论 25 707
  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,115评论 8 72
  • 关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫、企鹅电竞等项目的...
    稻草人_3e17阅读 3,595评论 0 10
  • 一.圆弧的绘制 arc() 基本使用函数: 参数说明: centerX, centerY: 圆心坐标 radius...
    JamesSawyer阅读 612评论 0 0
  • 在这个世界上,战争总是难以避免。你我缘起于战争,便在战争中缘灭吧。 一 飞沙狼烟,云国与大魏在飞沙岭的战争已经接近...
    天欲涨阅读 306评论 0 1