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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX