android studio 签名,打包,混淆,多渠道打包
来源:互联网 发布:linux anaconda怎么用 编辑:程序博客网 时间:2024/05/08 21:13
一、在android studio 中有两种的方式可以进行打包
(1)第一种方式
build->generate signed apk
而后选择要进行打包的项目,next 进行选择签名文件,填写密码 next
在下面打包有两种选择,一种是release 一种是debug ,在debug的状态下是不会进行签名和混淆的,
只有选择release的状态下才会进行签名和混淆
点击finish即可签名打包成功
(2)第二种方式
在build variants 里面将要打包的项目进行选择 debug 或是 release
而后在项目的build.gradle文件中进行配置文件位置,密码等
signingConfigs { release { storeFile file("签名文件位置") keyAlias " " keyPassword " 密码 " storePassword " 密码 " } }而后直接进行run即可,生成的apk即使进行过签名的apk文件。
生成的apk文件在:android studio工程的存储路径下 app/build/outputs/apk 中
二、在android studio中进行混淆
在eclipse中的是 proguard.cfg 文件 而在android studio中使用的是proguard-rules.pro ,不过直接拿过来用也是可以的
只要在build.gradle里面进行配置下即可,如下是在build.gradle中的配置
buildTypes { debug{//测试下的配置 minifyEnabled false shrinkResources false signingConfig signingConfigs.release } release {//正式的配置 minifyEnabled true // false表示不混淆,true表示混淆 shrinkResources true //移除无用的resource文件 //如果用eclipse里面的proguard.cfg,直接替换 proguard-rules.pro 即可 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } }
以下是整个的build.gradle的配置文件
apply plugin: 'com.android.application'android { compileSdkVersion 21 buildToolsVersion '21.1.2' defaultConfig { applicationId "com.**.**" minSdkVersion 8 targetSdkVersion 21 versionCode 1 versionName "1.0" } packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/license.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/notice.txt' exclude 'META-INF/ASL2.0' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude '!META-INF/MANIFEST.MF' exclude 'META-INF/MANIFEST.MF' } sourceSets.main { jniLibs.srcDirs = ['libs'] } productFlavors { } /** * 签名设置 */ signingConfigs { release { storeFile file("**") keyAlias "**" keyPassword "**" storePassword "**" } } buildTypes { debug{ minifyEnabled false shrinkResources false signingConfig signingConfigs.release } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.umeng.analytics:analytics:latest.integration' compile files('libs/httpclient-android-4.3.3.jar') compile files('libs/httpmime-4.3.5.jar') compile files('libs/jpush-sdk-release1.7.3.jar') compile files('libs/mframework.jar') compile files('libs/nineoldandroids-2.4.0.jar') compile files('libs/pinyin4j-2.5.0.jar') compile files('libs/ShareSDK-Core-2.5.9.jar') compile files('libs/ShareSDK-QZone-2.5.9.jar') compile files('libs/ShareSDK-SinaWeibo-2.5.9.jar') compile files('libs/ShareSDK-TencentWeibo-2.5.9.jar') compile files('libs/ShareSDK-Wechat-2.5.9.jar') compile files('libs/ShareSDK-Wechat-Core-2.5.9.jar') compile files('libs/ShareSDK-Wechat-Favorite-2.5.9.jar') compile files('libs/ShareSDK-Wechat-Moments-2.5.9.jar') compile files('libs/umeng-analytics-v5.6.4.jar') compile files('libs/swipemenulistview.jar') compile files('libs/xstream-1.4.7.jar') compile project(':**') compile project(':wheel')}
compile 'com.umeng.analytics:analytics:latest.integration'不需要在lib中添加jar包,要不会有 zip无法打开,或是包重复的错误
以下是混淆文件 proguard-rules.pro
-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService-keepclasseswithmembernames class * {native <methods>;}-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}-dontwarn com.sina.** -keep class com.sina.** { *;} -dontwarn com.handmark.** -keep class com.handmark.** { *;} -dontwarn com.viewpagerindicator.** -keep class com.viewpagerindicator.** { *;} -dontwarn cn.jpush.**-keep class cn.jpush.** { *; }-keepattributes Signature-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.examples.android.model.** { *; }-dontwarn com.ant.**-keep class com.ant.** { *; }-dontwarn com.nineoldandroids.**-keep class com.nineoldandroids.** { *; }-dontwarn m.framework.**-keep class m.framework.** { *; }-dontwarn org.apache.http.entity.mime.**-keep class org.apache.http.entity.mime.** { *; }-dontwarn com.handmark.pulltorefresh.library.**-keep class com.handmark.pulltorefresh.library.** { *; }-dontwarn com.loopj.android.http.**-keep class com.loopj.android.http.** { *; }-dontwarn org.apache.http.**-keep class org.apache.http.** { *; }-dontwarn org.apache.http.**-keep class org.apache.http.** { *; }-dontwarn com.nostra13.universalimageloader.**-keep class com.nostra13.universalimageloader.** { *; }#-libraryjars libs/android-support-v4.jar -dontwarn android.support.v4.** -keep class android.support.v4.** { *; }-keep interface android.support.v4.app.** { *; }-keep public class * extends android.support.v4.**-keep public class * extends android.app.Fragment-keep class com.google.gson.JsonObject { *; }-keep class com.badlogic.** { *; }-keep class * implements com.badlogic.gdx.utils.Json*-keep class com.google.** { *; }-keep class com.google.** { <fields>; <methods>;}-keepclassmembers class * extends java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}# Gson specific classes-keep class sun.misc.Unsafe { <fields>; <methods>;}# -keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson-keep class com.**.** { //当项目中有用到泛型的时候,要让项目中的module对象不进行混淆 <fields>; <methods>;}-keepclassmembers class * { public <init> (org.json.JSONObject);}-keep public class com.**.**.R$*{public static final int *;}-dontwarn u.aly.**-keep class u.aly.** { *; }
配置完后,之间像,签名打包进行打包即可
三、多渠道打包
在项目的 androidmanifest.xml 中添加
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
而后在项目的build.gradle中添加即可
//多渠道打包productFlavors { LianXiang {} Baidu {} AnZhi{} F360{} xiaomi {} MeiZu{} WanDouJia{} QQYingYongBao{} productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }}
通过 build->generate signed apk 进行打包,即可得到多个渠道的apk包
1 0
- android studio 签名,打包,混淆,多渠道打包
- android签名打包、签名混淆、多渠道打包
- android 签名混淆-多渠道打包
- Android 签名混淆-多渠道打包
- Android Studio多渠道签名打包
- 【Android Studio】代码混淆与多渠道打包
- Android Studio 混淆,多渠道打包,反编译 使用
- android studio多渠道打包+混淆配置
- Android Studio 多渠道打包并签名
- Android Studio Gradle 多渠道自动打包,动态修改HostUrl,签名apk,混淆配置详解
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- Android Studio -------打包、生成jks密钥、签名Apk、多渠道打包
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- hdu2639(01背包的第K大)
- bat修改文件内容
- sqldeveloper使用
- 正则表达之----验证数字的正则表达式集
- 根据给定日期判断当天是星期几
- android studio 签名,打包,混淆,多渠道打包
- XMPP的简单了解及使用(1)
- Android学习之跨进程通信安卓接口定义语言AIDL(二)
- ghjgk
- 零散
- 6、在MyJDBCUtils中加入update(String sql , Object[] args)方法
- Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明
- 告诉你Hadoop是什么
- TortoiseSVN文件夹及文件图标不显示解决方法