首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用ProGuard混淆OSGi包?

在云计算领域,ProGuard是一款非常有效的代码优化和混淆工具。要使用ProGuard混淆OSGi包,请按照以下步骤操作:

  1. 首先,确保您已经安装了Java Development Kit (JDK),并将其添加到系统的环境变量中。
  2. 下载并安装ProGuard。您可以从官方网站(https://www.guardsquare.com/en/products/proguard)下载最新版本的ProGuard。
  3. 将ProGuard添加到系统的环境变量中,以便在命令行中使用它。
  4. 创建一个名为“proguard.cfg”的配置文件,其中包含您的混淆规则。以下是一个示例配置文件:
代码语言:txt
复制

-injars bin/classes

-outjars bin/classes_processed.jar

-libraryjars /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar

-dontwarn

-dontnote

-optimizationpasses 5

-allowaccessmodification

-mergeinterfaces

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/,!class/merging/

-keepattributes Annotation

-keep public class * extends org.osgi.framework.BundleActivator {

代码语言:txt
复制
public void start(org.osgi.framework.BundleContext);
代码语言:txt
复制
public void stop(org.osgi.framework.BundleContext);

}

-keep public class * extends org.osgi.framework.ServiceFactory {

代码语言:txt
复制
public java.lang.Object getService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration);
代码语言:txt
复制
public void ungetService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration, java.lang.Object);

}

-keep public class * implements org.osgi.framework.ServiceFactory {

代码语言:txt
复制
public java.lang.Object getService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration);
代码语言:txt
复制
public void ungetService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration, java.lang.Object);

}

-keep public class * implements org.osgi.framework.BundleActivator {

代码语言:txt
复制
public void start(org.osgi.framework.BundleContext);
代码语言:txt
复制
public void stop(org.osgi.framework.BundleContext);

}

-keep public class * implements org.osgi.framework.Constants {

代码语言:txt
复制
public static final java.lang.String BUNDLE_ACTIVATOR;
代码语言:txt
复制
public static final java.lang.String BUNDLE_CLASSPATH;
代码语言:txt
复制
public static final java.lang.String BUNDLE_MANIFESTVERSION;
代码语言:txt
复制
public static final java.lang.String BUNDLE_NAME;
代码语言:txt
复制
public static final java.lang.String BUNDLE_NATIVECODE;
代码语言:txt
复制
public static final java.lang.String BUNDLE_REQUIREDEXECUTIONENVIRONMENT;
代码语言:txt
复制
public static final java.lang.String BUNDLE_SYMBOLICNAME;
代码语言:txt
复制
public static final java.lang.String BUNDLE_UPDATELOCATION;
代码语言:txt
复制
public static final java.lang.String BUNDLE_VENDOR;
代码语言:txt
复制
public static final java.lang.String BUNDLE_VERSION;
代码语言:txt
复制
public static final java.lang.String BUNDLE_DOCURL;
代码语言:txt
复制
public static final java.lang.String BUNDLE_CONTACTADDRESS;
代码语言:txt
复制
public static final java.lang.String BUNDLE_COPYRIGHT;
代码语言:txt
复制
public static final java.lang.String BUNDLE_DESCRIPTION;
代码语言:txt
复制
public static final java.lang.String BUNDLE_DISPLAYNAME;
代码语言:txt
复制
public static final java.lang.String BUNDLE_ICON;
代码语言:txt
复制
public static final java.lang.String BUNDLE_LICENSE;
代码语言:txt
复制
public static final java.lang.String BUNDLE_CATEGORY;
代码语言:txt
复制
public static final java.lang.String BUNDLE_BLUEPRINT;

}

-keep public class * implements org.osgi.framework.ServiceReference {

代码语言:txt
复制
public java.lang.String getProperty(java.lang.String);
代码语言:txt
复制
public java.lang.Object getProperty(java.lang.String);
代码语言:txt
复制
public java.lang.String[] getPropertyKeys();
代码语言:txt
复制
public org.osgi.framework.Bundle getBundle();
代码语言:txt
复制
public java.util.Collection getUsingBundles();
代码语言:txt
复制
public boolean isAssignableTo(org.osgi.framework.Bundle, java.lang.String);
代码语言:txt
复制
public java.lang.Object getProperty(org.osgi.framework.Bundle, java.lang.String);
代码语言:txt
复制
public java.lang.String getBundleLocation();
代码语言:txt
复制
public java.lang.String getServiceId();

}

-keep public class * implements org.osgi.framework.ServiceRegistration {

代码语言:txt
复制
public void setProperties(java.util.Dictionary);
代码语言:txt
复制
public void unregister();
代码语言:txt
复制
public org.osgi.framework.ServiceReference getReference();

}

-keep public class * implements org.osgi.framework.BundleContext {

代码语言:txt
复制
public org.osgi.framework.Bundle getBundle();
代码语言:txt
复制
public org.osgi.framework.Bundle installBundle(java.lang.String);
代码语言:txt
复制
public org.osgi.framework.Bundle installBundle(java.lang.String, java.io.InputStream);
代码语言:txt
复制
public org.osgi.framework.Bundle getBundle(java.lang.String);
代码语言:txt
复制
public org.osgi.framework.Bundle[] getBundles();
代码语言:txt
复制
public org.osgi.framework.ServiceRegistration registerService(java.lang.String[], java.lang.Object, java.util.Dictionary);
代码语言:txt
复制
public org.osgi.framework.ServiceRegistration registerService(java.lang.String, java.lang.Object, java.util.Dictionary);
代码语言:txt
复制
public org.osgi.framework.ServiceReference[] getServiceReferences(java.lang.String, java.lang.String);
代码语言:txt
复制
public org.osgi.framework.ServiceReference[] getAllServiceReferences(java.lang.String, java.lang.String);
代码语言:txt
复制
public java.lang.Object getService(org.osgi.framework.ServiceReference);
代码语言:txt
复制
public boolean ungetService(org.osgi.framework.ServiceReference);
代码语言:txt
复制
public org.osgi.framework.Filter createFilter(java.lang.String);
代码语言:txt
复制
public org.osgi.framework.ServiceListener[] getServiceListeners(java.lang.String);
代码语言:txt
复制
public org.osgi.framework.Bundle getBundle(long);

}

-keep public class * implements org.osgi.framework.ServiceListener {

代码语言:txt
复制
public void serviceChanged(org.osgi.framework.ServiceEvent);

}

-keep public class * implements org.osgi

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【Android 安装优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

    中 开启 Proguard , 在编译时 , 会自动进行如下一系列优化 : 压缩 Shrink : 检查 并 删除 没有使用的类 , 字段 , 方法 , 属性 ; 这里要注意 , 如果通过反射使用一个类时..., 可能会在该步骤被删除 ; 这里需要配置混淆文件 , 保留反射中使用的类 ; 优化 Optimize : 优化字节码 , 移除无用指令 ; 混淆 Obfuscate : 混淆 Java...; 遇到某个或类编译遇到警告退出 , -dontwarn 配置该不要爆出警告 ; 遇到没有找到的类 , 使用 -keep 不要混淆该类 ; 常用的混淆配置 : " -dontwarn " : 不要报出警告信息..., 如果出现警告 , 编译打包会被终止 ; # com 名下不要爆出警告 -dontwarn com.** " -keep " : 不要混淆的类 ; # com 名下的类不要混淆 -keep class...com.**{*;} 三、混淆前后对比 ---- 混淆前编译的 APK 安装 : \rm 3.6 MB 混淆后编译的 APK 安装 : \rm 1.7MB 四、build.gradle 完整配置文件

    3.8K20

    Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

    Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献...model 实体,非混淆对象 realm Shiro的自定义域,次要混淆对象 service 实体的服务,次要混淆对象 token Shiro的自定义令牌,次要混淆对象 utils 公司自己的工具类...) 本文的重头戏,使用Maven集成的ProGuard插件,混淆配置不用单独建立文件 proguard </goals...classes-pg.jar 混淆后的classes文件,里面包含完整的项目结构 proguard_map.txt 混淆内容的映射 proguard_seed.txt 参与混淆的类 混淆完成后,将classes-pg.jar

    6.2K10

    如何使用Combobulator检测依赖混淆攻击

    关于Combobulator Combobulator全称为Dependency Combobulator,是一款功能强大的模块化可扩展框架,该工具现已开源,能够帮助广大研究人员检测并防止潜在的依赖混淆攻击风险...在该工具的帮助下,广大研究人员可以更好地采用一种整体的方法来确保应用程序的安全发布,并可以根据不同的源(例如GitHub、JForg Artifactory等)和许多其他包管理方案(例如NDM、Maven...4、支持多种技术; 5、灵活性:决策树可以根据工具提供的内容或判断来确定方案; 该项目所提供的扩展能力允许广大研究人员根据自己的需求来进行定制开发。...工具安装 Combobulator具备高可用性,广大研究人员可以直接使用下列命令将该项目源码克隆至本地: git clone https://github.com/apiiro/combobulator.git...支持的数据输出格式 1、STDOU(默认) 2、CSV导出(-CSV) 工具使用样例 https://user-images.githubusercontent.com/90651458/140915800

    84020

    在NodeJS中使用npm实现JS代码混淆加密

    使用npm,在NodeJS中实现JS代码混淆加密在前后端JS开发过程中,JS代码保护(JS代码混淆加密)是非常重要的一环。...同时,JShaman还有更方便易用的npm,方便开发人员通过调用接口的方式,快速完成JS代码混淆加密。...从npm网站,可以找到名为jshaman-javascript-obfuscator的,如下图所示:这里有对它的使用说明,如在Nodejs环境中的安装方法,调用例程,等。...安装npm install jshaman-javascript-obfuscator使用NodeJS例程代码如下所示。...扩展使用把上述例程代码稍加改造,嵌入到自己的项目或产品中,就可以进行自动化的JS代码混淆加密了。混淆加密JS代码、提高JS代码安全性,防止他人随意查看、复制,就是如此简单。

    1.2K20

    iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用

    所以,当我们不进行混淆的情况下发布了一个,别人就可以通过反编译工具对进行反编译,基本还原我们的源码。这样肯定是对我们不利的。此时就需要用到代码混淆。...这样,别人反编译了我们的apk,得到的混淆后的代码看起来基本就是一堆杂乱无章、无法阅读的代码。代码混淆的时候还会进行一些优化,例如删除某些没用被使用到的代码,以及简单的重组代码,减少中间过程。...关于如何代码混淆的定义,详情可以看这里:怎么保护苹果手机移动应用程序ios ipa中的代码 | ipaguard使用教程现在了解了代码混淆,就看看如何使用代码混淆吧。...对于eclipse工程来说,代码混淆的规则,在 proguard-project.txt 文件中,我们需要根据规则去选择哪些代码需要混淆,哪些代码(一般我们引用的第三发jar,如果已经被混淆过,就不能再混淆...关于如何使用其他混淆器,如何对其他语言的代码进行混淆,以后了解到了再补充。。。​​

    16810

    谷歌Play马甲检测逻辑推测及应对措施

    做海外项目的同学一定都会遇到马甲的问题,马甲是指除了与主ICON和应用名不一致,其它内容基本相同。...作用: 给主导流 覆盖关键词,增加曝光量 功能测试 不过2021年开年以来,谷歌对马甲的检测收紧,那么我们就必须知道谷歌是如何检测马甲的。 谷歌如何检测马甲?...从反编译的产物可以猜测出如下几个可能点: 1.通过比对dex,通过代码的相似程度来判断 2.比对res文件夹下资源相似程度 3.比对AndroidManifest.xml中的声明的四大组件等,比对相似程度 马甲如何规避谷歌检测...1.dex上进行更复杂的混淆规则 可以使用这个库:变态代码混淆字典 将代码check出来,然后复制bt-proguard.txt到自己工程目录下,然后在proguard-rules.pro文件中进行配置即可...bt-proguard.txt 混淆后解析效果如下: 2.混淆res文件夹 这个可以使用微信的AndResGuard 3.给AndroidManifest.xml中插入代码 可以通过自定义

    4K31

    Android 混淆那些事儿

    本文主要讲述了代码混淆和资源混淆的原理,Studio默认的混淆方案,混淆的参数,以及如何对Apk进行代码混淆(自定义混淆文件)和资源混淆(结合微信混淆和美团混淆两种方案),避免Apk被逆向。...我们来看一下Proguard的几个步骤如何处理Entry Points。 在压缩阶段,Proguard从上述Entry Points开始遍历搜索哪些类和类成员被使用。....** {*;} 保持和子的类名和里面的内容均不被混淆 (2)-assumenosideeffects 指令: 下文会用在android log的移除上 assumeosideeffects是Optimization...: 上面讲述了如何进行代码混淆,再来讲讲如何对资源文件进行混淆。...请参见ProGuard官方问题解答; 参考文献: 1、Android 项目的代码混淆,Android proguard 使用说明 2、google 混淆官方文档 3、混淆官方网址 4、Android混淆快速配置之

    3.2K50

    如何使用LightsOut生成经过混淆处理的DLL

    关于LightsOut LightsOut是一款功能强大的DLL生成工具,该工具可以帮助广大研究人员轻松生成经过混淆处理的DLL。...该工具可以随机化DLL中所有的WinAPI函数使用、XOR编码字符串和基础的沙箱检测,并使用了Mingw-w64将经过混淆处理的C代码编译为DLL文件,然后再加载到任何有AMSI或ETW的进程中,例如PowerShell...接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地: git clone https://github.com/icyguider/LightsOut.git 然后切换到项目目录中,直接运行工具主脚本即可...options: -h, --help 显示工具帮助信息和退出 -m , --method 要使用的绕过技术...DLL的文件路径 Remote options: -p , --pid 要修补的远程进程PID (右滑查看更多) 工具使用

    11010

    android开发笔记之 Android代码混淆打包

    所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。...:proguard-project.txt”这行前的“#”删除即可; 2.修改混淆配置文件:找到项目根目录下的proguard-project.txt文件,修 改其中代码,这部分是最关键; 3.保存相关文件供以后出错时使用...这些内容讲了如何操作,参照官方文档,基本都会掌握。剩下的也是最难 的就是proguard-project.txt文件的编写。对于这部分,两种处理策略:自 己编写和使用别人写好的。...先说如何使用别人写好的,我们引用的第三方 库无论开源还是闭源如有特殊情况我们都可以在他的User Guide中找到混 淆代码的配置,如我们引用了大名鼎鼎的guillep PullToRefresh,我们可...那下面我们举个小例子看看如何自己写代码控制是否混淆

    78320

    android代码混淆

    所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。...proguard 问题和风险 代码混淆后虽然有混淆优化的好处,但是它往往也会带来如下的几点问题 1,混淆错误,用到第三方库的时候,必须告诉 proguard 不要检查,否则proguard 会报错。...名字已经固定,也不能混淆,比如自定义的View 。 Android Parcelable ,需要使用android 序列化的。...本地方法,不能修改本地方法名 annotations 注释 数据库驱动 有些resource 文件 用到反射的地方 如何实施 现在的系统已经配置为混淆时候会保留 Android系统组件...    确定统一的混淆类的成员名称来增加混淆 -flattenpackagehierarchy {package_name}    重新包装所有重命名的并放在给定的单一中 -repackageclass

    1.6K80

    Java 混淆

    它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android 开发用于混淆最终的项目,增加项目被反编译的难度——摘自百度百科。 ?...如官方图示(看不清,懵懂就行) ProGuard 会对输入的 JAR 文件按照压缩、优化、混淆、预验证的顺序依次进行处理,最后得到输出 JAR 文件; ProGuard 使用依赖类库(Library jars...在 Input/Output 中,Add input 选择要混淆的 JAR ,注意一定要添加待混淆的 JAR 依赖的所有类库,Add output 指定输出文件名(例如 a.jar);压缩(Shrinking...效果如何呢? 采用 JD-GUI 打开根据混淆输出的 JAR,效果貌似像那么回事儿。 ?...保护你劳动成果的方式有很多种,本次 2 分钟简单的分享,只是让你们知道有 ProGuard 这款技术轮子存在,有太多的细节需要去实践,大家可以按需,自行按照官网进行深入使用

    1.6K10

    Android-Proguard(混淆)

    大家看到了,有两个混淆文件,proguard-android.txt和proguard-rules.pro,proguard-rules.pro是我们需要自己编写的混淆文件,proguard-android.txt...刚才是开启混淆,那我们如何关闭,比如关闭压缩,关闭优化呢? ?...二:接下来我们来说一说混淆的基本规则: ? 但如果你用两颗星,会发现,虽然类名被保持了,但里面的变量名啥的都变了,那如果我们既要本保持类名和内容又要子保存呢?...class com.xzt.demotwo.*{*;} #可以保持本和子的类名和内容 -keep class com.xzt.demotwo.**{*;} #保持某个具体的类名不被混淆 -keep...,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象; 5,使用第三方开源库或者引用其他第三方的SDK时,如果有特别要求,也需要在混淆文件中加入对应的混淆规则; 6,有用到WebView的

    1.3K40

    ProGuard 在 Android 上的使用姿势

    ProGuard 除了可以大幅减少代码的空间之外,还可以让所有的标识符(、类和成员)都使用更短的名字,如 a.A 和 a.a.B。这个过程就是混淆。...如何使用 ProGuard?...在 ProGuard 官网您可以找到一个 使用手册。 在您深入研究这些配置之前,最好先大概理解 ProGuard如何工作的和我们为什么要指定一些额外的选项。 ?...“ 按钮), 您可以在 DEX 视图树中看到一些额外功能: 所有的名字都是混淆前的(即您可以看到原始的名字) 被 ProGuard 配置规则 kept 的,类,方法和属性会显示成粗体 您可以开启 “...如果您希望 ProGuard 移除所有未使用的代码,您应当避免 keep 规则写的太宽泛,如加入通配符匹配整个,而是使用类相关的匹配规则或者使用上面提及的 @Keep 注解。 ?

    2.6K40

    一篇文章带你领略Android混淆的魅力

    其实这两者之间并没有什么关联,只不过习惯性地放在一起来使用。那么,说了这么多,Android 平台上到底该如何开启混淆呢? 2.1 启用混淆 .........以上代码中的 proguard-android.txt 表示 Android 系统为我们提供的默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义的混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...资源压缩能够帮助我们移除项目及依赖仓库中未使用到的资源,有效地降低了apk的大小。...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...4.2 被反射的元素 被反射使用的类、变量、方法、名等不应该被混淆处理。

    95920

    详解Android的反编译和代码混淆

    生成一个classes-dex2jar.jar文件,使用jd-gui.exe打开生成的classes-dex2jar.jar文件 方式二:直接使用smali2java工具 什么是smali?...如何实现代码混淆 混淆类文件 修改module:app下的build.gradle buildTypes { release { //是否需要混淆,默认false代表不混淆,...true代表混淆 minifyEnabled true //混淆需要用到的一个工具:proguard,对应的一个文件是:proguard-android.txt(这个文件在android-sdk...\tools\proguard目录下) //proguard是一个压缩、优化和混淆Java字节码文件的免费工具 proguardFiles getDefaultProguardFile...把下面代码,放入proguard-rules.pro文末: #指定代码的压缩级别 -optimizationpasses 5 #明不混合大小写 -dontusemixedcaseclassnames

    1K20

    Android开发:请你吃一顿史上最全的Android混淆大餐

    其实这两者之间并没有什么关联,只不过习惯性地放在一起来使用。那么,说了这么多,Android 平台上到底该如何开启混淆呢? 启用混淆 .........以上代码中的 proguard-android.txt 表示 Android 系统为我们提供的默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义的混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...资源压缩能够帮助我们移除项目及依赖仓库中未使用到的资源,有效地降低了apk的大小。...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...被反射的元素 被反射使用的类、变量、方法、名等不应该被混淆处理。

    4.5K30

    Android 混淆是啥玩意儿?

    混淆的优缺点 优点: 代码混淆后阅读性降低,反编译后破译程序难度提高 混淆后字节数减少,减少了应用的体积 缺点: 混淆后,测试不充分可能导致某些功能不能使用 混淆只能提高反编译的门槛,并不能完全做到代码安全...如何开启混淆 Android自带一个混淆规则文件proguard-android.txt,这个文件在SDK目录下,里面有一些默认自带的规则。...如上文所说混淆的缺点,部分功能混淆后可能不正常 解决方法: 一轮测试尽可能的使用混淆测试; 与开发沟通有新的混淆规则时,重点测试; 回归测试必须使用混淆测试; 混淆应用产生崩溃时,崩溃log也是混淆的...android.view.View.performClick(View.java:6325) at android.view.View$PerformClick.run(View.java:25126) 如何混淆...log: Android SDK 默认提供了混淆解析工具,可分别使用命令行和GUI两种方式解析,工具位置:\tools\proguard\bin 解析日志时,需要release打包同时生成的

    1.7K41
    领券