proguard

如何避免APK文件的反向工程?

不想你离开。 提交于 2020-10-05 14:42:57
问题: I am developing a payment processing app for Android, and I want to prevent a hacker from accessing any resources, assets or source code from the APK file. 我正在开发 适用 于Android的 付款处理应用程序 ,并且我想防止黑客访问 APK 文件中的任何资源,资产或源代码。 If someone changes the .apk extension to .zip then they can unzip it and easily access all the app's resources and assets, and using dex2jar and a Java decompiler, they can also access the source code. 如果有人将.apk扩展名更改为.zip,那么他们可以将其解压缩并轻松访问应用程序的所有资源和资产,并且使用 dex2jar 和Java反编译器,他们还可以访问源代码。 It's very easy to reverse engineer an Android APK file - for more details see Stack Overflow

java代码混淆(使用 ProGuard 工具)

 ̄綄美尐妖づ 提交于 2020-10-02 07:59:39
参考文章: ProGuard简介 ProGuard 是一个压缩(shrink)、优化(optimize)和混淆(obfuscate) Java 字节码文件的免费的工具。它可以删除无用的类、字段、方法和属性,可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android 开发用于混淆最终的项目,增加项目被反编译的难度。 主要流程如下: ProGuard 会对输入的 JAR 文件按照压缩、优化、混淆、预验证的顺序依次进行处理,最后得到输出 JAR 文件; ProGuard 使用依赖类库(Library jars)来辅助对 Input jars 类之间的依赖关系进行解析,但是依赖类库本身不会被处理,也不会被包含到 Output jars 中。 下载ProGuard工具 下载最新版的 ProGuard,然后解压,进入到 bin 目录,Windows 下直接双击 proguardgui.bat 即可,而 Mac Os 下控制台运行 proguardgui.sh 即可。 下载地址: https://sourceforge.net/projects/proguard/files/latest/download 本次演示是在 Mac Os 下,控制台输入 sh proguardgui.sh。ProGuard

Android Studio打包apk自动获取SVN号、时间、版本号、版本名称

雨燕双飞 提交于 2020-08-19 13:47:44
备注:打包之前一定要记得首先从svn update一下代码 这样才能保证打包的svn号是当前最新的SVN号 一、根目录下build.gradle文件配置 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.3' classpath "org.tmatesoft.svnkit:svnkit:1.8.11"//1.添加此处 } } allprojects { repositories { mavenCentral() google() jcenter() maven { url "https://jitpack.io" } } } task clean(type: Delete) { delete rootProject.buildDir } 二、app中的build.gradle文件配置 apply plugin: 'com.android.application' import org

纯干货Android知识点整理(二)

放肆的年华 提交于 2020-08-12 17:52:15
本篇为第二篇整理的文章,第一篇的链接 纯干货Android知识点整理(一) 1.OkHttp解析 首先 OkHttp 内部是一个门户模式,所有的下发工作都是通过一个门户 Dispatcher 来进行分发。 然后在网络请求阶段通过责任链模式,链式的调用各个拦截器的 intercept 方法。其中有 2 个比较重要的拦截器:CacheInterceptor 和 CallServerInterceptor。它们分别用来做请求缓存和执行网络请求操作。 最后在理解源码实现的基础上,对 OkHttp 的功能进行了一些扩展,实现了网络请求进度的实现。 BridgeInterceptor:主要对 Request 中的 Head 设置默认值,比如 Content-Type、Keep-Alive、Cookie 等。 CacheInterceptor:负责 HTTP 请求的缓存处理。 ConnectInterceptor:负责建立与服务器地址之间的连接,也就是 TCP 链接。 CallServerInterceptor:负责向服务器发送请求,并从服务器拿到远端数据结果。 2.Bitmap解析 默认情况下 BitmapFactory 使用 Bitmap.Config.ARGB_8888 的存储方式来加载图片内容,而在这种存储模式下,每一个像素需要占用 4 个字节。因此上面图片 rodman

Android WebView —— Java 与 JavaScript 交互总结

你离开我真会死。 提交于 2020-08-11 14:33:42
相比于 Native App 和 Web App,Hybrid App 凭借其迭代灵活、控制自如、多端同步的优势在应用市场上越发显得优胜,主要得力于,其将变更频繁的部分产品功能使用 H5 开发并在客户端中借助 WebView 控件嵌入应用当中。所以,开发中我们总会遇到原生 Java 代码与网页中的 Js 代码之间相互调用从而产生的交互问题。 Java 与 Js 彼此调用的前提是设置 WebView 支持 JavaScript 功能: mWebView.getSettings().setJavaScriptEnabled(true); Java 调用 Js 第一步,在网页中使用 Js 定义提供给 Java 访问的方法,就像普通方法定义一样,如: <script type="text/javascript"> function javaCallJs(message){ alert(message); } </script> 第二步,在 Java 代码中按照 "javascript:XXX" 的 Url 格式使用 WebView 加载访问即可: mWebView.loadUrl("javascript:javaCallJs(" + "'Message From Java'" + ")"); 注意:String 类型的参数需要使用单引号 “'” 包裹,数组类型的参数则不用,如

com.esri.arcgis.android:arcgis-android:10.2.6-2 with proguard

删除回忆录丶 提交于 2020-08-07 05:57:12
问题 How to use com.esri.arcgis.android:arcgis-android:10.2.6-2 with proguard enabled? I am trying -keep class com.esri.** { *; } -keep interface com.esri.** { *; } but it is not helping. 回答1: Finally I found the working answer for it, and included this to my proguard rule file. -keep class com.esri.** { *; } -keep interface com.esri.** { *; } -keep class org.codehaus.jackson.** { *; } -dontwarn org.codehaus.jackson.map.ext.** -dontwarn jcifs.http.** worked for me. 来源: https://stackoverflow.com

com.esri.arcgis.android:arcgis-android:10.2.6-2 with proguard

南楼画角 提交于 2020-08-07 05:57:00
问题 How to use com.esri.arcgis.android:arcgis-android:10.2.6-2 with proguard enabled? I am trying -keep class com.esri.** { *; } -keep interface com.esri.** { *; } but it is not helping. 回答1: Finally I found the working answer for it, and included this to my proguard rule file. -keep class com.esri.** { *; } -keep interface com.esri.** { *; } -keep class org.codehaus.jackson.** { *; } -dontwarn org.codehaus.jackson.map.ext.** -dontwarn jcifs.http.** worked for me. 来源: https://stackoverflow.com

How to keep class constructor argument parameter names with Android R8

给你一囗甜甜゛ 提交于 2020-08-05 03:57:30
问题 I'm writing Android library, so I want to preserve parameter names for some constructors/methodes. I'm deploying my library as AAR file. After Gradle upgrade from 3.3.2 to 3.4.0 all arguments in constructors and public methods are renamed to something like "var1", before that everything was fine. As I understand main difference is that, now by default R8 is used to minify and obfuscate our code instead of Proguard. So probably I'm missing something in configuration. Let's say that I have

How to keep class constructor argument parameter names with Android R8

雨燕双飞 提交于 2020-08-05 03:55:13
问题 I'm writing Android library, so I want to preserve parameter names for some constructors/methodes. I'm deploying my library as AAR file. After Gradle upgrade from 3.3.2 to 3.4.0 all arguments in constructors and public methods are renamed to something like "var1", before that everything was fine. As I understand main difference is that, now by default R8 is used to minify and obfuscate our code instead of Proguard. So probably I'm missing something in configuration. Let's say that I have

R8 and Proguard Rules

烂漫一生 提交于 2020-07-31 04:42:14
问题 I am using https://github.com/amalChandran/trail-android this library in my android project. The animation was working perfectly fine. But, after enabling R8, the animation is not working. The library does not have any Proguard suggestion. I added the following block in one of my method, googleMap.setOnMapLoadedCallback(() -> { Route normalOverlayPolyline = new Route.Builder(mRouteOverlayView) .setRouteType(RouteType.PATH) .setCameraPosition(mMap.getCameraPosition()) .setProjection(mMap