@@ -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