android-使用proguard混淆JAR时的怪异行为

android-使用proguard混淆JAR时的怪异行为,第1张

概述我正在尝试使用Proguard(4.7,但4.6也有问题)来混淆AndroidJAR.我可以将问题分解为一个简单的示例项目.问题:对于某些函数(由于什么原因不清楚),公开的函数的参数名称丢失,有时“加扰”(确实).我想首先关注“丢失”的部分,因为混乱的事情更加奇怪.1)我在Eclipse中创建了一个库项目

我正在尝试使用Proguard(4.7,但4.6也有问题)来混淆Android JAR.我可以将问题分解为一个简单的示例项目.

问题:对于某些函数(由于什么原因不清楚),公开的函数的参数名称丢失,有时“加扰”(确实).我想首先关注“丢失”的部分,因为混乱的事情更加奇怪.

1)我在Eclipse中创建了一个库项目.由于某些原因,AndroID SDK为2.1更新1
该项目被标记为“ library Project”,并且只有一个类MyJarEntry.java和一个导出函数foo

package com.decades.myjar;import androID.location.LocationListener;public class MyJarEntry {    public voID foo(String provIDer, long minTime, float mindistance, LocationListener Listener) {    }}

2)我的项目有一个子目录“ proguard”,其中包含最新的proguard.jar和proguard.cfg,如下所示

-printmapPing out.map-keepparameternames-renamesourcefileattribute Sourcefile-keepattributes Exceptions,InnerClasses,Signature,Deprecated,            Sourcefile,lineNumbertable,*Annotation*,EnclosingMethod-keep public class * {    public protected *;}

3)我的Build.xml具有构建JAR和优化它的目标,因此在Eclipse中构建lib之后,我在终端中执行“ ant jar”和“ andoptimize”.这是build.xml

<project name="MyJar" default="jar" basedir="."><description>  lib JAR builder</description><!-- set global propertIEs for this build --><property name="res" location="res" /><property name="bin" location="bin" /><!-- Output directorIEs --><property name="out.dir" value="bin" /><property name="out.absolute.dir" location="${out.dir}" /><property name="out.classes.dir" value="${out.absolute.dir}/com" /><property name="out.classes.absolute.dir" location="${out.classes.dir}" /><!-- Pack the jar --><target name="jar">    <jar destfile="MyJar.jar" basedir="bin/">        <!-- replace 'com' by what ever you are using -->        <!-- as first part of the package name -->        <!-- e.g. de, org, ... -->        <!-- the ** is important to include the directory recursively -->        <include name="com/**" />    </jar></target><!-- Obfuscation with ProGuard --><property name="version" value="0.0.1"/>            <!-- change this occasionally --><property name="proguard-dir" value="proguard"/><property name="unoptimized" value="MyJar.jar"/><property name="optimized" value="MyJar_${version}.jar"/><target name="optimize" unless="nooptimize">    <!-- Run obfuscator -->    <java jar="${proguard-dir}/proguard.jar" fork="true" failonerror="true">        <jvmarg value="-Dmaximum.inlined.code.length=16"/>        <arg value="@${proguard-dir}/proguard.cfg"/>              <arg value="-injars ${unoptimized}"/>        <arg value="-outjars ${optimized}"/>        <arg value="-libraryjars /Users/decades/androID-sdk-mac_x86/platforms/androID-7/androID.jar"/>    </java>     </target>   

       

可以进行构建和混淆处理,但是将生成的MyJar_0.0.1.jar导入到测试项目中后,代码完成不会显示正确的参数名称,而是将foo表示为

foo(String arg0,long arg1,float arg2,LocationListener arg3)

尽管指定了“ keepparameternames”.

我已经花了几个小时,却无法正常工作.如果导入未混淆的JAR,一切都很好.软件包中的其他一些功能也会显示正确的参数名称.

一无所知,对吗?

问候

解决方法:

ProGuard 4.7(或更早版本)似乎会删除未使用的参数名称.现在,我已为以后的版本修复了此问题.您可以通过关闭优化(-dontoptimize)来解决此问题.

请注意,您始终可以报告有关ProGuard’s bug tracker的错误.

总结

以上是内存溢出为你收集整理的android-使用proguard混淆JAR时的怪异行为全部内容,希望文章能够帮你解决android-使用proguard混淆JAR时的怪异行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1093894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存