使用gradle打包签名及混淆的apk
刚刚学会了使用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'
//混淆
}
}
}
更多相关文章
- 关于Android(安卓)studio打包发布,以及Android签名的获取
- android studio中使用NDK开发C++
- 【Android翻译】Support Library Setup
- android 用 SAX 解析xml文件!
- Eclipse android import 导入project 出错的解决办法
- Android(安卓)热修复 Tinker Gradle Plugin解析
- android aapt用法
- 10.28,python,django中templates的奇偶性,python,swift多语言文件
- Android学习笔记之解决下载中中文文件名问题