code: def get_permissions(self, apilevel=None):
          
  
          # TODO maybe have the API level loading in the __init__ method and pass the APK as well?
          permmap = load_api_specific_resource_module('api_permission_mappings', apilevel)
          if not permmap:
              raise ValueError("No permission mapping found! Is one available? "
                               "The requested API level was '{}'".format(apilevel))
  
          for cls in self.get_external_classes():
              for meth_analysis in cls.get_methods():
                  meth = meth_analysis.get_method()
                  if meth.permission_api_name in permmap:
                      yield meth_analysis, permmap[meth.permission_api_name]
docs: Returns the permissions and the API method based on the API level specified.
          This can be used to find usage of API methods which require a permission.
          Should be used in combination with an :class:`~androguard.core.bytecodes.apk.APK`.
  
          The returned permissions are a list, as some API methods require multiple permissions at once.
  
          The following example shows the usage and how to get the calling methods using XREF:
  
          example::
              from androguard.misc import AnalyzeAPK
              a, d, dx = AnalyzeAPK("somefile.apk")
  
              for meth, perm in dx.get_permissions(a.get_effective_target_sdk_version()):
                  print("Using API method {} for permission {}".format(meth, perm))
                  print("used in:")
                  for _, m, _ in meth.get_xref_from():
                      print(m.full_name)
  
          ..note::
              This method might be unreliable and might not extract all used permissions.
              The permission mapping is based on [Axplorer](https://github.com/reddr/axplorer)
              and might be incomplete due to the nature of the extraction process.
              Unfortunately, there is no official API<->Permission mapping.
  
              The output of this method relies also on the set API level.
              If the wrong API level is used, the results might be wrong.
  
          :param apilevel: API level to load, or None for default
          :return: yields tuples of :class:`MethodClassAnalysis` (of the API method) and list of permission string