开发者社区> 问答> 正文

用proguard混淆后 jna调用dll报错 java.lang.Unsati?报错

遇到一个麻烦 用proguard混淆后 jna调用dll报错,没混淆之前是正常的,所有jar包都是添加好了的

报的是

Error looking up function 'b'
google了很久没找到答案 多数说dll没有这个方法,但是肯定不是的,没混淆之前是完全正常的,就混淆后报错



Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: Error looking up function 'b': ???????¨?
	at com.sun.jna.Function.<init>(Function.java:179)
	at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:344)
	at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:324)
	at com.sun.jna.Library$Handler.invoke(Library.java:203)
	at com.sun.proxy.$Proxy0.b(Unknown Source)
	at com.horn.main.i.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)




而我另外一个程序也是 jna调用dll代码架构都差不多 混淆后又正常的 


不知道什么原因,请各位帮忙看看


展开
收起
爱吃鱼的程序员 2020-06-22 15:24:26 971 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    jna类和方法不能扰码但奇怪的是我另外一个和这个是一样的只是少量代码不一样混淆后正常呢我就奇怪


    我在proguard中添加配置

    <preclass="brush:java;toolbar:true;auto-links:false;">-keepclasscom.sun.jna.**{ ;}-keepclasscom.horn.util.CQZDMDLL{;}-keepclasscom.horn.util.DM{ ;}就行了,但是还是觉得我另外一个程序没有添加这样的配置依然正常运行....

    以后有时间再研究吧

    再次留爪!今天编译又遇到相同的提示

    只要保证dll的方法名不被混淆就可以了比如我的那个dll类名叫DM

    -keepclasscom.horn.util.DM{;}

    这样配置后就OK了


    但是另外一个程序什么都没配置依然正常反编译jar后连DM这个类名都不见了依然正常真特么奇怪

    native代码不能混淆呦

    -keepclasseswithmembernamesclass*{
      native<methods>;
    }

    2020-06-22 15:24:42
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载