here:
it's simply a variable like any other with a value. the permission names are just strings. when you make a library and you want to let users refer to variables in the library, you declare them public.
when erel wrote the runtime permissions library, he made a number of permission names public. for example, the camera permission:
public static final String PERMISSION_CAMERA = "android.permission.CAMERA";
when you want to check for a permission, you can use the names that are public. you can also use the string value of the variable. it's a convenience. it saves time because most of the permissions that we use are declared public. you don't have to remember the exact wording of some string.
if android adds a new permission, it does not exist in the runtime permissions library until the library is updated and the new permission is defined and made public. you have to go to android documentation and find where the permission is defined in the sdk.
in the library, the check and request method passes a string: public void CheckAndRequest(BA ba, String Permission)
in the runtime permissions library if the public variable is defined, you can use it. if it's not defined (in the library), you can use the string value as defined in the sdk.
note: you have to use the string version in the manifest. the manifest has nothing to do with the library.