V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skull
V2EX  ›  Android

Java ->.class->jar 后怎么保证参数名不变

  •  1
     
  •   skull · 2017-03-14 10:13:10 +08:00 · 11130 次点击
    这是一个创建于 2812 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,最近在封装一个 sdk ,对外提供机器上的硬件驱动, Module 使用的是 Android Library , gradle 里面 minifyEnable 设置为 false ,暂时不启用混淆,通过命令 assembleDebug 或是 assembleRelase 编译,生成 jar 从 build/intermediates/bundles 里面取,可是不管是哪种打出来的 jar 包放到其它的工程里面去使用,发现里面的 [接口] 方法参数名变成了 val1,val2 等,这样用户在使用的时候没有语义上的理解,只能每个接口都去看文档,实在是不方便。请问有没有什么方法生成 jar 包,用户在使用方法的时候参数名保证还能正常提示?哪怕是把接口源代码打包进去,实现类我还是会选择混淆,求大神告知一下具体方法,多谢多谢。
    目前试过在 proguard-rules.pro 里面使用-keepparameternames 还是无果
    17 条回复    2018-11-13 13:42:26 +08:00
    nicevar
        1
    nicevar  
       2017-03-14 11:07:46 +08:00   ❤️ 2
    兄弟,这不是混淆的问题,是因为编译成 class 的时候就把参数给处理掉了,要达到这样的效果需要 java8 才行,编译的时候用-parameters 参数保留参数名,不过 android 现在都不支持 java8
    我觉得你没必要这样搞,既然是给别人用的你不弄文档,光让人家看函数+参数名字?是不是有点逗
    再说你直接在代码里面写上注释直接生成文档没有什么难得,分分钟的事,你才暴露多少接口给别人
    skull
        2
    skull  
    OP
       2017-03-14 11:23:00 +08:00
    @nicevar 不是不想提供文档,文档是百分百一定提供的,只是不想客户在使用的时候每个接口都要去看一下文档才知道参数的顺序以及意义
    zpf124
        3
    zpf124  
       2017-03-14 11:34:48 +08:00   ❤️ 1
    然后你们发布 jar 不发布源码?
    既然都不加密了,直接建个私服库,将源码和字节码都提交到死扶上,让对方添加依赖后可以直接显示源码。
    nicevar
        4
    nicevar  
       2017-03-14 11:35:48 +08:00
    @skull 有文档就行啊,你的想法是多余的,哪有 java 程序员不看文档的,这是给自己挖坑,学 java 入门就是从文档开始的,你看各大公司的 sdk 不都是提供一个文档+demo 就行了
    相反即使人家能看到函数名+参数没有文档,人家都还会向你要
    fwrq41251
        5
    fwrq41251  
       2017-03-14 11:44:44 +08:00   ❤️ 1
    maven-source-plugin ,可以把源码 attach 上去
    gradle 应该也有
    satifanie
        6
    satifanie  
       2017-03-14 11:59:42 +08:00   ❤️ 1
    你的需求是别人引入你的包之后,代码提示之类的显示参数名吧。 而且你用的 Maven 的工程吧。
    complie 组件选择 Eclipse 的编译就好!大致如下:
    https://gist.github.com/satifanie/82ed3569de67e0b772cfb0b126439b43
    somebody
        7
    somebody  
       2017-03-14 13:01:37 +08:00 via Android   ❤️ 1
    把源码一起发布到 maven 上,这样在 Android studio 里实现 SDK 里的接口时,就自动使用 SDK 源码里的变量名了
    或者如果不给源码,试试像 Android SDK 那样,如果不下载源码,只有个接口,里面没有实现(是个 stub )
    Cbdy
        8
    Cbdy  
       2017-03-14 13:09:25 +08:00   ❤️ 1
    自定义注解,加到参数 /方法前面
    aliuwr
        9
    aliuwr  
       2017-03-14 13:17:47 +08:00   ❤️ 1
    关键词 javadoc 。
    除了一并发布源码外,还能只打包 javadoc 发布。许多闭源项目都是这么做的。
    skull
        10
    skull  
    OP
       2017-03-14 13:44:47 +08:00
    @fwrq41251
    @satifanie
    多谢,主要是不想开放实现的源码,只想达到调用接口,参数名还在这个目的。有很多朋友提供了方法,我会再试试
    skull
        11
    skull  
    OP
       2017-03-14 13:54:27 +08:00
    @somebody 等我去研究一下第二种方法
    @aliuwr @Cbdy 多谢提供思想,我这边是有写 javadoc 的,可能是没有设置好,没有打包进去
    Cbdy
        12
    Cbdy  
       2017-03-14 14:52:52 +08:00
    @skull javadoc 怎么可能打进去,你可以打两个 jar 包,一个字节码,一个源代码
    SoloCompany
        13
    SoloCompany  
       2017-03-14 21:04:11 +08:00   ❤️ 1
    不想开源当然是发布 javadoc 了,可以同时发布到 maven
    懂开发的人自然知道怎么使用 javadoc ,基本上所有开发工具都内置 javadoc 支持,谁会傻乎乎的去依赖反编译?
    java8 的 -parameters 参数不是给你 debug / reference 用的,是给需要特殊场景下的反射用的
    he144467
        14
    he144467  
       2018-11-12 15:28:17 +08:00
    @skull 我也遇到这个问题了,请问是否解决了这个问题?
    如果解决了,能否传授给我一两招
    skull
        15
    skull  
    OP
       2018-11-12 17:24:49 +08:00 via iPhone
    @he144467 对外所有的方法抽象出接口来,提供两个 jar 包,一个正常编译出来的,一个打包的是接口源码,对方使用的时候加载一下源码接口包就可以了。方法就是上边的朋友提供的一样的
    he144467
        16
    he144467  
       2018-11-13 09:53:59 +08:00
    @skull 那我去试试,感谢
    he144467
        17
    he144467  
       2018-11-13 13:42:26 +08:00
    @skull 你有写过上面方法的总结吗,用来介绍接口源码的管理和和怎么将接口源码打成 jar 包
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   980 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:54 · PVG 06:54 · LAX 14:54 · JFK 17:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.