有许多同学是从Eclipse上转到Android Studio的,那么在Eclipse上打包相对来说还是比较容易的。
那么在Android Studio 上如何打包呢?下面我以 Android Studio 3.0.1 版本做演示,其他版本应该类似。
一、 首先我说下如何导出debug包
sign.pngdebug 版本的包相对比较容易,不需要做过多的配置,直接如下图所示便可以导出,但是缺点也很明显,如果你有项目中有多个 Phone & Tablet Module ,就会都打包了,并且有一个地方出错可能都不能完成打包
path.png那么打完的包,怎么找呢?它的路径是:
就是模块下的 build/outputs/debug/app-debug.apk
可以直接发给别人安装,这种包通常会比较大一些
二、下面说正式签名打包
1. 是否需要混淆,一般都会开启混淆,那么就需要准备混淆文件 proguard-rules.pro
下面提供一个通用的配置
#不优化
-dontoptimize
-optimizations !code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
# 输出mapping文件的位置
-printmapping 'E:\Proguard\proguardMapping.txt'
-dontusemixedcaseclassnames
# 混淆时可能被移除下面这些东西,如果想保留,需要用该选项
-keepattributes InnerClasses,Signature,SourceFile,LineNumberTable
#不预校验
-dontpreverify
-verbose
#-ignorewarnings
-dontwarn
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-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
# ---------------------------------默认保留---------------------------------
-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 * extends android.view.View
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.** {
<fields>;
<methods>;
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keep public class * extends android.view.View {
*** get*();
void set*(***);
public <init>(android.content.Context);
public <init>(android.content.Context,android.util.AttributeSet);
public <init>(android.content.Context,android.util.AttributeSet,int);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context,android.util.AttributeSet);
public <init>(android.content.Context,android.util.AttributeSet,int);
}
-keep class * extends android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-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();
}
-keep class **.R$* {
<fields>;
<methods>;
}
-keepclassmembers class * {
void *(**On*Event);
}
# ---------------------------------webview------------------------------------
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView,java.lang.String,android.graphics.Bitmap);
public boolean *(android.webkit.WebView,java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView,jav.lang.String);
}
# 有WebView 还有其他需要保持的,这里不一一列出了
# -----------------------------------------------------------------------------
-keepclasseswithmembers,allowshrinking class * {
native <methods>;
}
# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
2. 在 build.gradle 中修改配置
buildTypes {
release {
zipAlignEnabled true //Zipalign优化
minifyEnabled true //混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
3. 签名准备
4. 开始签名打包
sign.png sign.png我把签名准备和签名放到一块,因为即使没有签名,也可以在打包的时候创建
第一次签名的时候可以选择 Create new.... 如果有签名就直接选择签名文件就可以了
-
创建签名
sign.png
Key store path 签名文件保存的路径
Password 密码 Confirm 确认密码
Alias 别名,一个应用使用一个,但是可以使用同一个jks文件
First and Last Name 开发者的姓名
Organization Unit 组织单位
Organization 组织
City or Locality 城市或地区(不明白老外的逻辑,这里面和下面是什么关系,有的人会这里写省,下面写国家)
State or Province 州或省
Country Code(XX) 国家代码(XX)
下面是完成图
sign_complete.png-
输入签名信息
签名信息 -
填写打包信息
打包 -
点击finish完成!
网友评论