AndroidStudio打包~生成jks密钥~签名apk~多渠道打包


生成jks签名

1.选择Build > Generate Signed APK

2.选择项目app > Next

如果以前没有生成过 .jks密钥 文件,选择Create new,否则选择Choose existing

3.我们选择Create new新创建一个 .jks密钥 文件

4.选择签名文件的路径,把这些信息填完点击OK

5.选择Next继续完成下一步

Build Type 选择 release,由于我们还没有为项目添加任何第三方的打包渠道,所以此时No Flavors可以选择。

6.选择Finish,签名生成

注意:在第3步,我们选择了Create new去生成一个新的 .jks 密钥文件,之后我们在对项目进行打包签名时则可以直接选择Choose existing即可。

选择已经存在的.jks密钥文件,点击OK即可,后面步骤如前所描述。

多渠道打包

国内Android App市场很多,每次发版几十个渠道包。Android Gradle给我们提供了productFlavors,让我们可以很方便地对生成的APK包进行定制。

1.在AndroidManifest.xml文件中添加渠道表示标签

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".WebViewActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <!-- UMeng 配置-->
        <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>

</application>

2.在build.gradle(Module: app)文件中添加多渠道

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
        applicationId "com.zqp2sh.webviewwraph5"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
}

// 添加多渠道
productFlavors {
        xiaomi {}
        qihu360 {}
        baidu {}
        wandoujia {}
}
productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:24.2.1'
}

添加完之后我们在点击一下Gradle 的构建按钮重新构建一下

回顾

此时我们在进行.jks密钥文件生成时,就会发现此时的Flavors会出现4个渠道选项,我们可以任意选择,如下:

选中之后,点击Finish即可进行签名打包,生成响应的apk:

3.测试

通过Java代码获取到meta标签中的value来测试是否成功实现了多渠道打包:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
//                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_webview);

        getWindow().setBackgroundDrawableResource(android.R.color.transparent);

        init();
        initWebView();

        String umeng_channel = getApplicationMetaValue("UMENG_CHANNEL");
        Log.d("Science", umeng_channel);
}

/**
*  测试多渠道打包
*/
private String  getApplicationMetaValue(String name) {
        String value= "";
        try {
            ApplicationInfo appInfo =getPackageManager()
                    .getApplicationInfo(getPackageName(),
                            PackageManager.GET_META_DATA);
            value = appInfo.metaData.getString(name);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return value;
}

测试代码添加完毕之后,我们现在点击AS左下角的Gradle,我们此时就可以看到我们刚才添加的xiaomi、qihu360、baidu、wandoujia都出现了,如下图:

此时我们双击[installBaiduDebug], apk成功的安装到你的手机上了,手机不会自动给你打开app,需要手动打开,然后就可以在控制台看到日志如下:

10-29 22:55:04.154 12335-12335/com.zqp2sh.webviewwraph5 D/Science: baidu

进入图示目录可以看到生成的响应apk,此时还没有签名:

注意:保持有手机与AS相连接

然后我们在双击[installXiaomiDebug],然后看看

''10-29 22:55:04.154 12335-12335/com.zqp2sh.webviewwraph5 D/Science: xiaomi

进入图示目录可以看到生成的响应apk,此时还没有签名:

其他的渠道也是一样的操作方式,不在一一说明。

小结: 这里我们在AndroidManifest.xml文件中添加了meta标签、在build.gradle(Module: app)中添加了渠道产品对应的渠道名称 ,最后我们测试多渠道打包,这里还最重要的一点就是: 没有让大家去运行什么命令,全部是让大家点击来实现的,其实点击就是在运行命令

./gradew installXiaomiDebug 

一键完成打包(全部产品)并签名

正如标题所示,我们如果要打包所有的产品,肯定不能像刚才一样一个一个来打,那么现在来使用另外一个按钮(命令)assemble,如下:

然后切换项目到Project视图,找到app>build>outputs>apk,结果如下我们看到所有版本的apk都有了,有debug版的,debug没有签名的,release没有签名的。

如果我们现在只想打包所有的release版本怎么办呢?看下面的图,如果想打release版就双击(assembleRelease),如果想打所有的debug版本就双击(assembleDebug)

现在我们就可以通过不同的按钮打包不同类型的apk了。

常用的打包命令

./gradlew assembleDebug 编译并打Debug包
./gradlew assembleRelease 编译并打Release的包
./gradlew installRelease Release模式打包并安装
./gradlew uninstallRelease 卸载Release模式包
 .....

问题: 所有的apk生成了,但是没有签名是发布不了的,怎么办?

1.点击项目架构按钮,如下,或使快捷键:Command + ;

2.然后点击app>Signing > + ,然后填写上签名信息,最后点击OK

我们做的上述操作其实就是在build.gradle(Module: app)文件中添加如下信息:

此时我们把apk下面的apk文件删掉,然后双击assembleRelease,结果发现还是没有签名,你在逗我?

注意: 我们目前为止只是配置了签名信息,但是并没有给产品(apk)指定,我们只需要在build.gradle(Module: app)文件中添加如下的代码就 ok了,我们来试试看。

//指定签名为release
signingConfig signingConfigs.release

现在删掉apk文件夹下所有的apk,然后选择assembleRelease, 然后点击run按钮,如下图,这里的run会记录我们最近使用的run脚本名称.

现在我们来看看apk目录下的安装包是否签名:

补充

安装apk的命令(包名一样版本号一样,所以只能存在一个,在进行多个渠道apk安装测试时,一台手机上只能安装一个)

adb install apk路径/app-渠道名-release.apk

总结

我们在第一部分生成了.jks密钥文件,以便于后续部分的使用,然后进行多渠道打包:在manifast文件中添加了meta渠道标签,然后修改了gradle的文件添加了不同的渠道产品,最后我们在代码中读取了meta标签的value并且在进行了日志打印。最后我们又添加了签名配置,指定了给release版本的签名,签名的名称是release,并最终搞定了一键多渠道打包签名。

参考资料
http://blog.csdn.net/yy1300326388/article/details/48344411
http://blog.csdn.net/yy1300326388/article/details/48296221
http://wuxiaolong.me/2016/04/01/gradle4android3/
http://www.rocidea.com/roc-23118.aspx
http://mouxuejie.com/blog/2016-08-06/build-and-multichannel-package-practice/
http://www.jianshu.com/p/bb681879a291
http://blog.qiji.tech/archives/1050

QinPeng Zhu wechat
扫一扫,关注我的公众号获取更多资讯!
学习分享,感谢鼓励!