⑴ android里proguard.cfg文件有什么用
android里proguard.cfg文件是代码混淆用,是为了防止你的apk被反编译而代码全部暴露.不过目前的代码混淆只是把命名修改了一下而已,真正反编译时还是可以想办法还原出来的,所以不能真正的混淆。
其详解为:
-injars androidtest.jar【jar包所在地址】
-outjars out【输出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
- 【指定不去忽略非公共的库类。 】
-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
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>; 【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}
-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 class * extends android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】
public static final android.os.Parcelable$Creator *;
}
⑵ 关于Android studio 怎么使用代码混淆的问题
Android Studio上混淆打包apk方法: //混淆,新版本是ninifyEnabled不再是runproguard minifyEnabled true //加载默认混淆配置文件及自定义混淆 配置 proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard.cfg' 设置minifyEnabled true,就会在打包的时候进行代码混淆处理. 其中proguard-android.txt不用管,在sdk目录里面,主要是配置了proguard.cfg文件。 直接在android studio创建项目不会有这个文件,而是 proguard-rules.pro文件,其实一样的,因为项目是从eclipse迁移过来的,之前在eclipse上混淆是 proguard.cfg文件.
⑶ 如何混淆android代码以及注意事项
2.3SDK的两个新特点:
1.刚安装上2.3时,查看sdk目录,发现在 ools下新增了一文件夹“proguard”,如下图,我就在想是不是Google终于官方对proguard考虑进去了。理论上,对java的混淆都是可以的,但关键在于如何编写proguard的混淆脚本。
注意要点:
1.混淆以后的包会比混淆前的包小一点,一定要注意这点.
如果混淆不成功,请在第2步,将proguard.config=proguard.cfg修改为proguard.config=E:Mobile_DevelopGoogle_AndroidpublicGoldenBeach_newproguard.cfg这种类似的用绝对路径,请注意绝对路径中的文件夹名不能含有空格,如果有空格请替换为"_".
2.android在用proguard混淆时,一般情况下使用系统自带的配置文件就可以保持大部分外部需要引用的类,比如Activity,view扩展等等,但是有些情况下一些引入的外部lib,如果被混淆也会出现各种各样的问题,如果不想混淆这些包,就要加上
-keep class packagename.** {*;}
这样就能完整保持原有class了
⑷ android stuido 有哪些混淆工具
混淆,新版本是ninifyEnabled不再是runproguard
minifyEnabled true
/。
直接在android studio创建项目不会有这个文件,而是 proguard-rules.pro文件,其实一样的,因为项目是从eclipse迁移过来的,之前在eclipse上混淆是 proguard;/加载默认混淆配置文件及自定义混淆 配置
proguardFiles getDefaultProguardFile('.cfg文件,在sdk目录里面,主要是配置了proguard;proguard-android.txt'),',就会在打包的时候进行代码混淆处理. 其中proguard-android.txt不用管;proguard.cfg'
设置minifyEnabled true.cfg文件Android Studio上混淆打包apk方法:
//
⑸ android 工程中什么是混淆代码工具proguard的配置文件
proguard的配置文件如果是在4.3版本之后,新建工程之后,就会生成这个文件,里面可以进行一些混淆的操作。
⑹ android studio 怎么配置gradle
build.gradle
//设置脚本的运行环境
buildscript {
//支持java 依赖库管理(maven/ivy),用于项目的依赖。
repositories {
mavenCentral()
}
//依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
//声明构建的项目类型,这里当然是android了
apply plugin: 'android'
//设置编译android项目的参数
android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 8
targetSdkVersion 17
}
//Android默认配置
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
//测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
instrumentTest.setRoot('tests')
}
//这个是解决lint报错的代码
lintOptions {
abortOnError false
}
/**
* 签名设置
*/
signingConfigs {
myConfigs {
storeFile file("签名文件地址")
keyAlias "..."
keyPassword "..."
storePassword "..."
}
}
/**
* 混淆设置
*/
buildTypes {
release {
signingConfig signingConfigs.myConfigs
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/**
* 渠道打包(不同包名)
*/
proctFlavors {
qqqq {
applicationId = '包名'
}
hhhhh {
applicationId='包名'
}
}
}
/**
* .so文件的导入
*/
task NativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
}
tasks.withType(Compile) {
options.encoding = "UTF-8"
}
tasks.withType(Compile) {
compileTask -> compileTask.dependsOn NativeLibs
}
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders = [new File(buildDir, 'lib')]
}
//依赖库
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
gradle 作为构建工具,能够很方便的使用本地jar包,以下为使用的代码块。
ependencies {
//单文件依赖
compile files('libs/android-support-v4.jar')
//某个文件夹下面全部依赖
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
}
gradle 同时支持maven,ivy,由于ivy我没用过,所以用maven 作为例子,以下为代码块:
repositories {
//从中央库里面获取依赖
mavenCentral()
//或者使用指定的本地maven 库
maven{
url "file://F:/githubrepo/releases"
}
//或者使用指定的远程maven库
maven{
url "远程库地址"
}
}
dependencies {
//应用格式: packageName:artifactId:version
compile 'com.google.android:support-v4:r13'}
android {
}
对于项目依赖 android library的话,就不是依赖一个jar,那么简单了,在这里需要使用gradle mulit project 机制。在过去,android library并没有一个很好的包管理方式,简单来说,在gradle出现以前,官方并没有一种用于管理android library 依赖包的方式,一般我们都是直接下载别人的android library project 源码进行集成,而对于第三方的android-maven-plugin 用的是apklib 格式。
而现在,官方终于推出一种android library的打包格式,扩展名为*.aar。前面提到,目前android gradle插件并不支持本地直接使用*.aar文件,不过,支持包管理库的引用方式,下面,我为大家说一下,怎么对android library 发布使用。
打包android library
对android library 进行打包直接在library项目下面使用gradle build 即可,然后,你就会在 build/libs 目录下看到两个*.aar文件,一个debug包用的,一个是release 下用的,看个人需求使用,这里我们用的是release 版本的 .aar 文件。
⑺ android代码混淆以及怎么判断一个apk代码是否被混淆过
1、proguard原理
java代码编译成二进制class文件,这个class文件也可以反编译成源代码,除了注释外,其他的code基本都可以看到。为了防止重要code被泄露,我们往往需要混淆,即把方法名,变量名,类名,包名等这些java元素的名称改成让人意想不到的名称,这样代码结构就没有变化,还可以运行,但是想弄懂代码的架构却很难。proguard就起到了这样的作用:
一、它可以分析一组class的结构,根据用户的配置,然后把这些class文件中可以混淆的java元素进行混淆
二、删除无效的代码
三、对代码进行优化(使用adt插件导出的apk,还进行zipalign优化)
缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会导致程序出错。
一、用到反射的地方(android中的api常用@hide注释掉,开发者在调用相应的方法时,需要用到反射)
二、当app的代码要依赖于系统的接口时,如被系统代码调用的回调方法,这种方法比较复杂
三、java元素名称是配置文件中配置好的
所以在使用proguard时,我们需要有个配置文件告诉proguard,哪些java元素是不能混淆的。
2、proguard配置
-dontwarn缺省proguard会检查每一个引用是否正确,但是第三方库里往往有些不会用到的类,没有正确引用,如果不配置的话,系统就会报错。
-keep指定的类和类成员被保留作为入口
-keepclassmembes指定的类成员被保留。
-keepclasswithmembers指定的类和类成员被保留,假如指定的类成员存在的话。
⑻ 如何设置android的proguard configuration
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
⑼ 安装了android studio后怎样重新配置参数
现在我们用一个新建的项目来说明。
项目结构如下
⑽ android proguard 混淆后gson解析数据一直为null
混淆代码的时候注意事项:android使用打包过程中proguard混淆后,会导致一些错误1.写在视图xml中的onClick响应出错.因为写在xml中的onClick是通过反射调用的,proguard认为它们没有在代码中被调用过,所以将它们从代码中除掉或改名了.解决方法:在proguard.cfg中添加以下代码,就可以防止被配在视图xml中的onClick方法被proguard优化掉-keepclassmembersclass*extendsandroid.app.Activity{publicvoid*(android.view.View);}2.jni反调java方法这些类或方法同样可能会被proguard认为没有调用过而被除掉,或都被改名.这些方法最好统一写在一个类中,然后这个类不作优化,或是找出所有jni调用过的类与方法,在proguard.cfg中配置,不对它们作优化3.其它反射调用的java类与方法使用反射时一定要注意proguard可能会认为那些方法未被调用过,会在代码优化过程中将它们改名或除去.在使用反射的地方一定要在proguard.cfg中配置,不优化反射调用过的类和方法最后在proguard优化过后会产生一些文件mp.txt–描述.apk文件中所有类文件间的内部结构mapping.txt–列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。seeds.txt–列出了未被混淆的类和成员usage.txt–列出了从.apk中删除的代码要注意分析mapping.txt与usage.txt看xml视图中写的onClick响应函数,jni调用到的java类与方法,反射调用过的类与方法是否被混淆或重命名-keepclasscom.badlogic.gdx.backends.android.**{*;}像这样的只是不混淆:这个包下的类(不包括子包里的东西),用到一个第三文的类就要把这个类所在的包,像上面加上还要注意的是android-support-v4.jar这个包问题,这里加上了对这个jar包的处理详细可参见:9928801