刚刚学会了使用gradle批量打包apk,接下来给apk签名、加混淆。

参考:http://my.oschina.net/sammy1990/blog/271306#OSC_h4_3

1. 签名

签名也就是给apk加密,1.防止被反编译;2.防止应用被其他同包名的应用覆盖。

在build.gradle中添加一下配置:

android {

……

//签名
signingConfigs {
myConfig {
storeFile file("签名文件所在路径/keystore") //签名文件
storePassword "12345"
keyAlias "12345"
keyPassword "12345" //签名密码
}
}

buildTypes{
release {
signingConfig signingConfigs.myConfig
}
}

}

然后执行gradle clean、gradle build,“BUILD SUCCESSFUL”后,在build\outputs\apk目录下带有unsigned字符的apk不见了,说明生成了签名的apk。

2.混淆

对代码进行混淆,会对代码中的变量、类名重命名,一般命名成无意义的字符;也会去除没有用到的代码,对程序进行优化和压缩,增加apk被他人反编译、盗取代码的难度。

buildTypes{
release {
signingConfig signingConfigs.myConfig
//混淆
runProguard true
proguardFile 'Android SDK所在路径/tools/proguard/proguard-android.txt'
//混淆
}
}

如上面代码所示,我们可以使用runProguard true开启混淆,并配置混淆文件。android的sdk中已经为我们提供了两个默认的配置文件,我们可以拿过来进行使用,proguard-android.txt和proguard-android-optimize.txt。

然后执行gradle clean、gradle build,“BUILD SUCCESSFUL”后,在工程build\outputs目录下生成proguard文件夹,该文件夹下是混淆文件:

  • dump.txt 描述apk文件中所有类文件间的内部结构。
  • mapping.txt 列出了原始的类,方法,和字段名与混淆后代码之间的映射。
  • seeds.txt 列出了未被混淆的类和成员
  • usage.txt 列出了从apk中删除的代码

如果release出去的版本出现了bug,调试的时候可能要用到这些文件,具体的调试方法参考文档里有详细描述。

加了签名配置和混淆配置的build.gradle文件内容如下所示:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
apply plugin: 'android'

dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}

android {
compileSdkVersion 17
buildToolsVersion "22.0.1"

sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}

// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')

// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')

app1{
manifest.srcFile 'tests/AndroidManifest1.xml'
}
app2{
manifest.srcFile 'tests/AndroidManifest2.xml'
}
instrumentTest.setRoot('tests')
}

productFlavors {
useOldManifestMerger true

app1{
//这里可以配置不同的包名
applicationId="com.example.erase1"
}
app2{
applicationId="com.example.erase2"
}
}

//签名
signingConfigs {
myConfig {
storeFile file("../keystore") //签名文件
storePassword "12345"
keyAlias "12345"
keyPassword "12345" //签名密码
}
}

buildTypes{
release {
signingConfig signingConfigs.myConfig
//混淆
runProguard true
proguardFile '../../android-sdks/andrid-sdks/tools/proguard/proguard-android.txt'
//混淆
}
}

}

更多相关文章

  1. 关于Android(安卓)studio打包发布,以及Android签名的获取
  2. android studio中使用NDK开发C++
  3. 【Android翻译】Support Library Setup
  4. android 用 SAX 解析xml文件!
  5. Eclipse android import 导入project 出错的解决办法
  6. Android(安卓)热修复 Tinker Gradle Plugin解析
  7. android aapt用法
  8. 10.28,python,django中templates的奇偶性,python,swift多语言文件
  9. Android学习笔记之解决下载中中文文件名问题

随机推荐

  1. Android(安卓)实现微信登录
  2. android 获取音乐文件的内置专辑图片
  3. Android休眠唤醒驱动流程分析
  4. android ImageUtils 图片处理工具类
  5. android全屏
  6. android获取手机信息大全
  7. 【Android】隐藏底部虚拟按键,亲测可用
  8. android Paint 设置线宽setStrokeWidth()
  9. android获取mac地址方法
  10. 更改ProgressBar颜色,SwipeBack滑动返回