@@ -46,9 +46,8 @@ static void AddiOSDependencies(string pathToBuiltProject)
4646        pbxProject . AddFrameworkToProject ( targetGuid ,  "AdSupport.framework" ,  false ) ; 
4747        pbxProject . AddFrameworkToProject ( targetGuid ,  "Webkit.framework" ,  false ) ; 
4848        pbxProject . AddFrameworkToProject ( targetGuid ,  "StoreKit.framework" ,  false ) ; 
49-         pbxProject . AddFrameworkToProject ( targetGuid ,  "AdServices.framework" ,  true ) ; 
50- 
51- 
49+         pbxProject . AddFrameworkToProject ( targetGuid ,  "AdServices.framework" ,  true ) ;  // optional=true 
50+         
5251        // Add .dylib 
5352        pbxProject . AddFileToBuild ( targetGuid ,  pbxProject . AddFile ( "usr/lib/libsqlite3.0.tbd" ,  "Frameworks/libsqlite3.0.tbd" ,  PBXSourceTree . Sdk ) ) ; 
5453        pbxProject . AddFileToBuild ( targetGuid ,  pbxProject . AddFile ( "usr/lib/libz.tbd" ,  "Frameworks/libz.tbd" ,  PBXSourceTree . Sdk ) ) ; 
@@ -64,10 +63,14 @@ static void AddiOSDependencies(string pathToBuiltProject)
6463
6564public  class  SingularPostBuild :  IPostGenerateGradleAndroidProject 
6665{ 
67-     public  const  string  ACCESS_NETWORK_STATE  =  "android.permission.ACCESS_NETWORK_STATE" ; 
68-     public  const  string  INTERNET  =  "android.permission.INTERNET" ; 
66+     public  int  callbackOrder  {  get  {  return  1 ;  }  } 
6967
7068    public  void  OnPostGenerateGradleAndroidProject ( string  basePath ) 
69+     { 
70+         ModifyAndroidManifestXmlFile ( basePath ) ; 
71+     } 
72+     
73+     private  void  ModifyAndroidManifestXmlFile ( string  basePath ) 
7174    { 
7275        string  appManifestPath  =  Path . Combine ( basePath ,  "src/main/AndroidManifest.xml" ) ; 
7376
@@ -76,26 +79,26 @@ public void OnPostGenerateGradleAndroidProject(string basePath)
7679        manifestFile . Load ( appManifestPath ) ; 
7780
7881        // Add needed permissions if they are missing. 
79-         addPermissions ( manifestFile ) ; 
82+         AddPermissions ( manifestFile ) ; 
8083
8184        manifestFile . Save ( appManifestPath ) ; 
8285
8386        // Clean the manifest file. 
84-         cleanManifestFile ( appManifestPath ) ; 
87+         CleanManifestFile ( appManifestPath ) ; 
8588    } 
8689
87-     public  int  callbackOrder  {  get  {  return  1 ;  }  } 
88- 
89-     static void  addPermissions ( XmlDocument  manifest ) 
90+     static void  AddPermissions ( XmlDocument  manifest ) 
9091    { 
9192        List < string >  existingPermissions  =  new  List < string > ( ) ; 
9293
9394        XmlElement  manifestRoot  =  manifest . DocumentElement ; 
9495
96+         string  USES_PERMISSION_ELEMENT  =  "uses-permission" ; 
97+         
9598        // Check if permissions are already there. 
9699        foreach  ( XmlNode  node  in  manifestRoot . ChildNodes ) 
97100        { 
98-             if  ( node . Name  ==  "uses-permission" ) 
101+             if  ( node . Name  ==  USES_PERMISSION_ELEMENT ) 
99102            { 
100103                foreach  ( XmlAttribute  attribute  in  node . Attributes ) 
101104                { 
@@ -104,22 +107,28 @@ static void addPermissions(XmlDocument manifest)
104107            } 
105108        } 
106109
107-         if   ( ! existingPermissions . Contains ( INTERNET ) ) 
110+         string [ ]   permissionsToAdd   =   new [ ] 
108111        { 
109-             XmlElement  element  =  manifest . CreateElement ( "uses-permission" ) ; 
110-             element . SetAttribute ( "android__name" ,  INTERNET ) ; 
111-             manifestRoot . AppendChild ( element ) ; 
112-         } 
113- 
114-         if  ( ! existingPermissions . Contains ( ACCESS_NETWORK_STATE ) ) 
112+             "android.permission.ACCESS_NETWORK_STATE" , 
113+             "android.permission.INTERNET" , 
114+             "BIND_GET_INSTALL_REFERRER_SERVICE" , 
115+             "com.android.vending.CHECK_LICENSE" , 
116+             "com.google.android.gms.permission.AD_ID" 
117+         } ; 
118+ 
119+         string  ANDROID_NAME_ATTRIBUTE  =  "android__name" ;  // see doc inside below function: cleanManifestFile 
120+         foreach  ( string  permission  in  permissionsToAdd ) 
115121        { 
116-             XmlElement  element  =  manifest . CreateElement ( "uses-permission" ) ; 
117-             element . SetAttribute ( "android__name" ,  ACCESS_NETWORK_STATE ) ; 
118-             manifestRoot . AppendChild ( element ) ; 
122+             if  ( ! existingPermissions . Contains ( permission ) ) 
123+             { 
124+                 XmlElement  element  =  manifest . CreateElement ( USES_PERMISSION_ELEMENT ) ; 
125+                 element . SetAttribute ( ANDROID_NAME_ATTRIBUTE ,  permission ) ; 
126+                 manifestRoot . AppendChild ( element ) ; 
127+             } 
119128        } 
120129    } 
121130
122-     static void  cleanManifestFile ( String  manifestPath ) 
131+     static void  CleanManifestFile ( String  manifestPath ) 
123132    { 
124133        // Due to XML writing issue with XmlElement methods which are unable 
125134        // to write "android:[param]" string, we have wrote "android__[param]" string instead. 
0 commit comments