android集成分享sdk后怎么代码混淆

作者&投稿:藤毓 (若有异议请与网页底部的电邮联系)
android混淆时怎么避免sharesdk混淆~

在proguard.cfg中设置

把资源文件提取出来,其他的代码混淆。activity启动的类不能打包进去。

为了保护代码被反编译,android引入了混淆代码的概念
1.设置混淆
在工程下找到project.properties文件
在文件中加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt这个是系统的
也可以用自己的混淆文件(这样就可以配置一些自己的东西),去sdk.dir}/tools/proguard/ 下复制proguard-android.txt文件到本地工程中
然后设置成proguard.config=proguard-android.txt
project.properties文件:
[java] view plaincopy

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
proguard.config=proguard-android.txt

# Project target.
target=android-17

-injars androidtest.jar【jar包所在地址】
-outjars out【输出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】
-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
-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 *;
}

=====================================常见异常===================================
参考:http://blog.csdn.net/vrix/article/details/7100841

加入第三方jar包之后常出现的几个异常:
proguard returned with error code 1.See console
情况1:
Proguard returned with error code 1. See console
Error: C:/Documents (系统找不到指定文件)
后来发现是因为将整个工程放到了桌面上,而桌面的目录是C:/Documents and Settings/Administrator/桌面,在这里面有空格,而proguard进行发编译的时候是不允许有空格的
如果换了正确路径还不好用的话,直接删除proguard就好了
注意:SDK和程序路径最好不要有空格符
情况2:
Proguard returned with error code 1. See console
异常:
java.lang.ArrayIndexOutOfBoundsException
解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”
参考文章:http://groups.google.com/group/android-developers/browse_thread/thread/eca3b0f5ce6ad00f

我把项目中生成的proguard文件夹(此时文件夹是空的)删掉,然后再重新运行项目,就OK 了。
情况3:
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read [proguard.ClassPathEntry@106082] (No such file or directory)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:230)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:200)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:178)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.execute(InputReader.java:100)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.readInput(ProGuard.java:195)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.execute(ProGuard.java:78)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.main(ProGuard.java:499)
抛出这样的异常的原因是第三方jar的引用路径不对,没有找到这个需要忽略混淆的jar包。

========================官方文档翻译========================================

原文
http://developer.android.com/guide/developing/tools/proguard.html

混淆器(ProGuard)
  在本文中(In this document)
Enabling ProGuard
Configuring ProGuard
Decoding Obfuscated Stack Traces
Debugging considerations for published applications
  参见
ProGuard Manual ?
ProGuard ReTrace Manual ?
混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比较小的.apk文件,该文件比较难进行逆向工程。因此,当你的应用程序对安全敏感(要求高),例如当你授权应用程序的时候,混淆器是一种重要的保护手段。
混淆器被集成在android 构建系统中,所以你不必手动调用它。同时混淆器仅在发布模式下进行构建应用程序的时候才会运行起来,所以在调试模式下构建程序时,你不必处理混淆代码。让混淆器运行起来是可选择的,但是推荐选上。
这个文档描述了怎样启用并配置混淆器,以及使用跟踪(retrace)工具对混淆的堆栈跟踪信息(stack traces)进行解码。

启用混淆器Enabling ProGuard
当你新建了一个Android工程之后,一个proguard.cfg文件会在工程的根目录下自动创建。这个文件定义了混淆器是怎样优化和混淆你的代码的,所以懂得怎样根据你的需要来定制是非常重要的。缺省的配置文件仅覆盖到了通常情况,所以根据你的需求,很可能需要编辑它。接下来的内容是关于通过定制混淆器配置文件来对混淆器配置。
为了让启用混淆器作为Ant或者Eclipse构建过程中一部分,可以在<project_root>/default.properties文件中,设置proguard.config属性。路径可以是绝对路径或者工程根目录的相对路径。
如果你让proguard.cfg文件在缺省位置(工程的根目录),你可以像这样指定位置:
proguard.config=proguard.cfg

同样,你可以把该文件放到任意的位置,并指定它的绝对路径。
proguard.config=/path/to/proguard.cfg

当你在发布模式下,或者通过运行ant release,或者通过使用Eclipse中的Export Wizard构建你的应用程序的时候,构建系统都会自动地去检查proguard.config属性是否被设置了。如果被设置了,混淆器在把所有东西打包成.apk文件之前,自动地对应用程序字节码进行混淆处理。而在调试模式中构建则不会调用混淆器,因为那样调试会更加繁重。

运行混淆器之后输出的文件有:
dump.txt
描述.apk包中所有class文件的内部结构。
mapping.txt

列出了源代码与混淆后的类,方法和属性名字之间的映射。这个文件对于在构建之后得到的bug报告是有用的,因为它把混淆的堆栈跟踪信息反翻译为源代码中的类,方法和成员名字。更多信息,查看解码混淆过的堆栈跟踪信息。

seeds.txt
列出那些未混淆的类和成员。
usage.txt
列出从.apk中剥离的代码。
这些文件放在以下目录中:

注意:每次在发布模式下构建时,这些文件都会被最新的文件覆盖。所以每次发布程序时候,为了反混淆来自构建时产生的bug报告,请保存这些文件的一个拷贝。对于为什么要保存这些文件的重要性的更多信息,请查看程序发布调试注意事项。

混淆器配置(proguard config)
某些情况下,proguard.cfg文件的缺省配置可以满足需求了。但是,对于混淆器来说,大多数情况做出正确的分析是困难的,并且它或许会删除在它看来是无用的,但对于程序来说却确实需要的代码。一些例子如下:

一个仅引用于AndroidManifest.xml文件的类。
一个通过JNI调用的方法。
动态引用的属性和方法。
<project_root>/bin/proguard 当你使用Ant时
<project_root>/proguard 当你使用Eclipse时

解码混淆过的堆栈跟踪信息(Decoding Obfuscated Stack Traces)
当混淆代码并输出了一个堆栈调试信息时,这些方法名字是混淆过的,虽然可以进行调试,但是调试变得困难。幸运的是,每当混淆器运行时候,它都会输出到文件<project_root>/bin/proguard/mapping.txt中,该文件包含了从原始类,方法和属性名字到混淆后名字的映射。
Windows系统中retrace.bat脚本命令或者Linux和Mac OS X系统中retrace.sh脚本命令能把混淆后的堆栈调试信息转换为可以理解的文件。它被放在<sdk_root>/tools/proguard/目录下。运行retrace工具的命令语法是:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt

如果你没有为<stracktrace_file>指定值,那么retrace工具从标准输入读取。

已发布应用程序的调试注意事项(Debugging considerations for published applications)
保存好每一个已发布给用户的程序的mapping.txt文件。通过保存发布构建版本的mapping.txt文件拷贝,确保当用户碰到bug,并把混淆后的堆栈调试跟踪信息提交给你时,你可以进行调试从而修复问题。程序的mapping.txt文件在每次发布构建时都会被覆盖,所以你一定要注意保存正确的版本。
例如,假设你已经发布了一个应用程序并在继续在新的版本中开发添加新的功能。接着你马上启动混淆器并创建一个新的发布版本。该操作把mapping.txt文件覆盖了。一个用户提交了来自当前发布版本的bug报告,该报告包含了堆栈调试信息。你再也不能对用户的堆栈信息进行调试了,因为这个对应用户本机上版本的mapping.txt文件不存在了。其他覆盖mapping.txt文件的情况还有很多,所以对于每一个可能需要调试的版本,你都要确保有一份拷贝。


手机和电脑之间快速互传大型文件
并且它通过 P2P 的方式直接从 A 设备传输到 B 设备,文件不会储存在云端,传输更快更没有限制,也可以保障一部份安全。2、Portal:电脑手机传送大量影音文件 Portal 有 Android 与 iPhone app ,它来自于 Pushbullet 团队的设计, Pushbullet 团队独立出「电脑与手机之间无线传输文件」这个特殊需求,让你...

百度地图
消息透露,百度手机地图将推出离线地图包和android版本客户端。显然,这对于流量资费昂贵的移动手机用户来说,无疑是雪中送炭,而对数量日益增长的android智能机...但其症结也颇多,大多数业务都止步于LBS鼻祖Foursquare的模仿品,Check-In、切客等概念炒作的成分似乎更大。回过头来反思一下,发现症结主要在于LBS服务最主要...

小米怎么发展起来的?
2010年12月10日,米聊Android内测版正式发布。小米手机2011年1月8日,公司因扩张迅速、迁至新址望京卷石天地大厦。2011年7月12日,小米创始团队正式亮相,宣布...而其在宣传上不遗余力地说明其高管的成分,用高管的背景来让大家产生信任感,说白了,也是一种降低认知门槛的举措,让小米从一开始就和山寨厂商划出了一定的...

如何把旧Android数据转移到iOS上
工具 安卓系统手机;苹果系统手机;操作步骤 在iPhone上激活到【应用与数据】时,选择【从安卓设备转移数据】。选择【设置】-【通用】-【还原】-【抹掉所有内容和设置】,可以重新回到上面的设置。下载【转移到iOS】,安装到安卓手机上。安装完成后,打开转移到iOS,点击【继续】。阅读条款与条件,点击右...

安卓和苹果可以互传文件的APP
安卓和苹果可以互传文件有以下四类APP可供选择 1、聊天 QQapp 微信app 等 双方都使用相同的聊天工具, 可以利用聊天工具把图片发过去.2、网盘 百度云app 等 用网盘分享文件适合文件比较大或者文件比较多的情况,把文件通过网盘的客户端上传到网盘。文件上传之后,可以把文件共享,这时会生成一个分享的...

音视频入门-音频压缩技术(二)
AAC LC:(LOW Complexity)低复杂度规格,码流是128K,音质好 AAC HE V1:AAC LC + SBR(Spectral Band Replication),其核心思想是按频谱分保存,低频编码保存主要成分,高频单独放大编码保存音质 码率在64K左右 AAC HE V2:AAC LC + SBR + PS(Parametric Stereo)其核心思想是双声道中的...

我的世界是什么游戏?
打一棵树,直到你得到一些木头,把木头变成木板,然后将木板结合起来创造一个手工制作的桌子。只要找到合适的成分,就可以使用制作工作台制作各种有用的工具。我的世界这款游戏几乎可以在现在常见的设备和系统中玩,支持Windows系统,苹果IOS,安卓,以及XBOX,甚至Linux系统。

欧阳海水经典语录
4、气质这个东西,内在散发的东西,慢慢每天会发现有些新鲜的成分。所以,(最小说)我个人认为可能气质更重要一些。 5、语言是一种习惯,当你长时间通过这样练习...罗永浩目前开发基于安卓(android)的深度定制操作系统的锤子手机,20xx年5月20日,罗永浩正式发布了首款智能手机产品Smartisan T1。 【老罗语录】 1. 就快考到...

智能穿戴设备大品牌有哪些
除了出色的性能之外,我们还发现它具有舒适的贴合感、轻巧的体形和有趣的身体成分测量工具,因此,称其为...如果你拥有一部Android手机,那么现在能买到的最好的智能手表就是三星的GalaxyWatch3。不过,它也可以与...这是一个有趣的功能集,它与以健身为中心的智能手表的所有基本功能相结合,包括跟踪训练、GPS、语音...

谁能给一些游戏,手机上的,不用网络就能玩的,ANDROID的
我建议你使用QQ电脑管家,看图,有很多游戏哦,抱你手都玩的麻!!!

大埔县15177171354: android sharesdk 分享成功执行的什么方法 -
东郭冯腰腿: 使用ShareSDK步骤1. ShareSDK官网,创建应用 获取Key2. ShareSDK官网,下载SDK3. 使ShareSDK的DEMO正常运行 (类库:ShareSDK for Android demo:ShareSDK for Android Sample)4.创建新的项目5.去各平台注册key!

大埔县15177171354: 环信sdk3.0在android中怎么用 -
东郭冯腰腿: 解决方法如下:1、菜单window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打上勾2、windows-->preference-->workbench-->keys 下设置Content Assist 的快捷键3、window->Preferences->Java->Editor->Content...

大埔县15177171354: 安卓sdk解压后该怎么办啊,我设置了tools的环境变量,;E:\安卓\android - sdk - windows\tools;cmd没运行成功 -
东郭冯腰腿: 在我的电脑右键【属性】打开,点击【高级系统设置】.转到第二步.点击【环境变量】.转第三步.在系统变量里找到Path选中(图中蓝色那条),点击下面的【编辑】.转第四步.在变量值里加入androidSDK中platform-tools和tools的目录路径,这里我的是E:\android-sdk_r20.0.3-windows\android-sdk-windows\platform-tools和E:\adt-bundle-windows-x86_64-20130729\sdk\tools.在windows运行符上运行adb 出现图你成功啦.

大埔县15177171354: Android工程打包成apk后如何再接入sdk并能实现sdk中的接口 -
东郭冯腰腿: 有些sdk的接入是提供jar包,这样的可以简单地将jar包制作成android plugin,加入到unity工程中,打包成apk输出.而还有一些sdk,则是提供了一个lib工程.在sdk提供的文档里说明,要在android工程中,通过添加依赖的方式来添加.但是对...

大埔县15177171354: 我已经成功的安装了android sdk manager怎么使用 -
东郭冯腰腿: sdk 配置 “计算机”->属性->高级系统设置->环境变量 path 加上 "d:\sdk2.2\tools"即可 eclipse搭建简单如下1.android-sdk-windows 解压,放到一个位置例如 D:\Android\android-sdk-windows2.在eclipse里安装ADT,可以参考在线安装或者下下...

大埔县15177171354: 如何导入ShareSDK的sample - Android开发经验分享 -
东郭冯腰腿: 由于项目需要,最近需要做10几个平台的分享,如果自己去集成,浪费很多时间,而且还很难成功.最后发现Sharesdk,可以满足项目需求. 首先,需要到他们的官网http://sharesdk.cn/下载android版本的SDK. 然后玩了一下他们的sample,...

大埔县15177171354: 大神你好,我在网上下载的源码,电脑上已经安装了Android studio和sdk,可是如何导入源码及如何运行啊? -
东郭冯腰腿: 直接打开你的Android Studio软件,然后点击File--->New--->Import Project然后选择你的项目文件的目录.点击OK即可导入.导入后,如果工程没有错误的话,点击Run app即可运行

大埔县15177171354: Android SDK如何使用? -
东郭冯腰腿: 创建安卓模拟器1、下载安卓sdk软件包,类似android-sdkxxxxxx-windows.zip.2、解压后在android-sdk-windows文件夹下会有如下的文件.3、在其中找到“AVD Manager”应用程序.4、双击打开,等待一会儿会出现如下的窗口.5、点击右...

大埔县15177171354: Android SDK工具 怎么用 -
东郭冯腰腿: 下载sdk之后解压,然后打开目录里面的sdk manager程序,下载你需要的android平台以及api Android平台下载好之后,可以打开avd manager程序创建你的安卓虚拟机

大埔县15177171354: androidsdk怎么安装 -
东郭冯腰腿: Android SDK的安装与环境变量配置步骤:一、配置Andriod环境变量1、下载Android SDK,点击安装,直接默认路径即可2、默认路径安装后,安装完成,开始配置环境变量.3、打开计算机属性——高级系统设置——环境变量(如上文)4、...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网