android基础——对Java中注释/**@hide*/的初步认识
2013-12-25 00:53
316 查看
今天写一个调节系统背光亮度的时候,参考了Android中的Setting源码,在源码中有这么一段代码:
[java] view
plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
private static final int MAXIMUM_BACKLIGHT = android.os.PowerManager.BRIGHTNESS_ON;
然后我模仿它的代码,来进行编写我的应用,但是当我copy这段代码后报错
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/21/83c3d551acb58b7beb85a6c155e20012)
报错内容如下:
[java] view
plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
BRIGHTNESS_ON cannot be resolved or is not a field
然后我去察看源代码,发现定义如下:
[java] view
plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
/**
* Brightness value for fully on.
* @hide
*/
public static final int BRIGHTNESS_ON = 255;
明显声明为public,怎么可能会访问不到呢?再细看注释,发现里面有“@hide”这个标志。后来百度一下才认识到,类或API是否开放,是通过doc的注释{@hide}来控制的。这表示不对外公开api,但是系统内部是可以使用该注释标记的接口的。
google 给了两个选择:1. 在你添加的API或者变量前面,增加javadoc 注释@hide。但是要注意的是,并不是简单写个@hide 或者 /*@hide*/ 就可以了,这些都是错误的javadoc注释格式,标准的javadoc都是这样的 /** */ 而且对于 format 变量 应该加上 { }。所以我们应该这样写 /** {@hide} */ 2. 你就是想要生成的javadoc里面出现这个方法或者变量,你必须输入:make
update-api 但是如果修改的是google没有开放出来的类,比如RIL,PhoneFactory,就不会出现这个问题。
如何解决这个报错的问题呢,问了一下公司的前辈,前辈是这么解释的,加入了 /** {@hide} */ 注视后的类或者API是google编译时不对外开放的,但是运行的时候这写类和API都是可以访问的。为了在Eclipse中不报错的话,可以准备以下几步就可以不报错了。
1,准备好编译后的Android源码。
2,在该源码的out目录下寻找包含你所用隐藏类的jar文件,通常文件名为classes.jar。例如framework的jar文件为out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/21/043df62775508d2a1fc1c75948d07f5c)
3,在eclipse的Android项目中,选择项目属性->Java Build Path->Libraries->Add Library->User Library->Next-> UserLibraries进入到User Libraries管理界面,点击New新建一个User Library,比如android_framework,点击Add Jars把Jar包加入到建立的User Library中,最后点击OK就可以了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/21/3b4e68f1b2c7369b37dda381fcce3f6e)
现在在Eclipse中就不会再报错了。
[java] view
plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
private static final int MAXIMUM_BACKLIGHT = android.os.PowerManager.BRIGHTNESS_ON;
然后我模仿它的代码,来进行编写我的应用,但是当我copy这段代码后报错
报错内容如下:
[java] view
plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
BRIGHTNESS_ON cannot be resolved or is not a field
然后我去察看源代码,发现定义如下:
[java] view
plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
/**
* Brightness value for fully on.
* @hide
*/
public static final int BRIGHTNESS_ON = 255;
明显声明为public,怎么可能会访问不到呢?再细看注释,发现里面有“@hide”这个标志。后来百度一下才认识到,类或API是否开放,是通过doc的注释{@hide}来控制的。这表示不对外公开api,但是系统内部是可以使用该注释标记的接口的。
google 给了两个选择:1. 在你添加的API或者变量前面,增加javadoc 注释@hide。但是要注意的是,并不是简单写个@hide 或者 /*@hide*/ 就可以了,这些都是错误的javadoc注释格式,标准的javadoc都是这样的 /** */ 而且对于 format 变量 应该加上 { }。所以我们应该这样写 /** {@hide} */ 2. 你就是想要生成的javadoc里面出现这个方法或者变量,你必须输入:make
update-api 但是如果修改的是google没有开放出来的类,比如RIL,PhoneFactory,就不会出现这个问题。
如何解决这个报错的问题呢,问了一下公司的前辈,前辈是这么解释的,加入了 /** {@hide} */ 注视后的类或者API是google编译时不对外开放的,但是运行的时候这写类和API都是可以访问的。为了在Eclipse中不报错的话,可以准备以下几步就可以不报错了。
1,准备好编译后的Android源码。
2,在该源码的out目录下寻找包含你所用隐藏类的jar文件,通常文件名为classes.jar。例如framework的jar文件为out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar。
3,在eclipse的Android项目中,选择项目属性->Java Build Path->Libraries->Add Library->User Library->Next-> UserLibraries进入到User Libraries管理界面,点击New新建一个User Library,比如android_framework,点击Add Jars把Jar包加入到建立的User Library中,最后点击OK就可以了。
现在在Eclipse中就不会再报错了。
相关文章推荐
- 我的Android进阶之旅------>对Java中注释/**@hide*/的初步认识
- Java中注释/**@hide*/的初步认识
- 【幻化万千戏红尘】qianfeng-Android-Day04-Spinner、ScrollVie、AutoCompleteTextView,Activity初步认识基础学习:
- android框架Java API接口总注释/**@hide*/和internal API
- Java自学之路-Java基础教程-5:Java代码的初步认识HelloWorld
- java基础—初步认识JVM
- java4android (继承 初步认识)
- 【java开发】面向对象初步认识与基础概念讲解
- Android程序员面试Java基础
- Android 之路15---Java基础9
- Android面试之----谈谈你对Java中Native关键字的认识!
- Android-NDK开发之基础--Android JNI有关Java类命名方式
- java基础之认识内部类(未修订)
- Lesson_for_java_day01---html初步认识
- Java4Android-继承初步
- Java和Android注释规范
- 黑马程序员.Android攻城狮.JAVA基础.1.10.Java网络编程
- 【我的Android进阶之旅】Android 源代码中的Java代码中//$NON-NLS-1$ 注释是什么意思?
- android 自定义View(一、基础认识)
- Android问题:JAVA基础之继承部分