@@ -671,6 +671,10 @@ private void GradleResolution(
671
671
string destinationDirectory , string androidSdkPath ,
672
672
bool logErrorOnMissingArtifacts , bool closeWindowOnCompletion ,
673
673
System . Action < List < Dependency > > resolutionComplete ) {
674
+ // Get all dependencies.
675
+ var allDependencies = PlayServicesSupport . GetAllDependencies ( ) ;
676
+ var allDependenciesList = new List < Dependency > ( allDependencies . Values ) ;
677
+
674
678
// Namespace for resources under the src/scripts directory embedded within this
675
679
// assembly.
676
680
const string EMBEDDED_RESOURCES_NAMESPACE = "PlayServicesResolver.scripts." ;
@@ -680,30 +684,32 @@ private void GradleResolution(
680
684
"gradlew.bat" : "gradlew" ) ) ;
681
685
var buildScript = Path . GetFullPath ( Path . Combine (
682
686
gradleBuildDirectory , EMBEDDED_RESOURCES_NAMESPACE + "download_artifacts.gradle" ) ) ;
683
- // Get all dependencies.
684
- var allDependencies = PlayServicesSupport . GetAllDependencies ( ) ;
685
- var allDependenciesList = new List < Dependency > ( allDependencies . Values ) ;
687
+ var gradleTemplateZip = Path . Combine (
688
+ gradleBuildDirectory , EMBEDDED_RESOURCES_NAMESPACE + "gradle-template.zip" ) ;
689
+
690
+ // Extract the gradle wrapper and build script.
691
+ if ( ! EmbeddedResource . ExtractResources (
692
+ typeof ( GradleResolver ) . Assembly ,
693
+ new KeyValuePair < string , string > [ ] {
694
+ new KeyValuePair < string , string > ( null , gradleTemplateZip ) ,
695
+ new KeyValuePair < string , string > ( null , buildScript ) ,
696
+ } , PlayServicesResolver . logger ) ) {
697
+ PlayServicesResolver . Log ( String . Format (
698
+ "Failed to extract {0} and {1} from assembly {2}" ,
699
+ gradleTemplateZip , buildScript , typeof ( GradleResolver ) . Assembly . FullName ) ,
700
+ level : LogLevel . Error ) ;
701
+ resolutionComplete ( allDependenciesList ) ;
702
+ return ;
703
+ }
686
704
687
705
// Extract Gradle wrapper and the build script to the build directory.
688
- if ( ! ( Directory . Exists ( gradleBuildDirectory ) && File . Exists ( gradleWrapper ) &&
689
- File . Exists ( buildScript ) ) ) {
690
- var gradleTemplateZip = Path . Combine (
691
- gradleBuildDirectory , EMBEDDED_RESOURCES_NAMESPACE + "gradle-template.zip" ) ;
692
- foreach ( var resource in new [ ] { gradleTemplateZip , buildScript } ) {
693
- ExtractResource ( Path . GetFileName ( resource ) , resource ) ;
694
- }
695
- if ( ! PlayServicesResolver . ExtractZip ( gradleTemplateZip , new [ ] {
696
- "gradle/wrapper/gradle-wrapper.jar" ,
697
- "gradle/wrapper/gradle-wrapper.properties" ,
698
- "gradlew" ,
699
- "gradlew.bat" } , gradleBuildDirectory ) ) {
700
- PlayServicesResolver . Log (
701
- String . Format ( "Unable to extract Gradle build component {0}\n \n " +
702
- "Resolution failed." , gradleTemplateZip ) ,
703
- level : LogLevel . Error ) ;
704
- resolutionComplete ( allDependenciesList ) ;
705
- return ;
706
- }
706
+ if ( PlayServicesResolver . ExtractZip (
707
+ gradleTemplateZip , new [ ] {
708
+ "gradle/wrapper/gradle-wrapper.jar" ,
709
+ "gradle/wrapper/gradle-wrapper.properties" ,
710
+ "gradlew" ,
711
+ "gradlew.bat" } ,
712
+ gradleBuildDirectory , true ) ) {
707
713
// Files extracted from the zip file don't have the executable bit set on some
708
714
// platforms, so set it here.
709
715
// Unfortunately, File.GetAccessControl() isn't implemented, so we'll use
@@ -723,6 +729,13 @@ private void GradleResolution(
723
729
return ;
724
730
}
725
731
}
732
+ } else {
733
+ PlayServicesResolver . Log (
734
+ String . Format ( "Unable to extract Gradle build component {0}\n \n " +
735
+ "Resolution failed." , gradleTemplateZip ) ,
736
+ level : LogLevel . Error ) ;
737
+ resolutionComplete ( allDependenciesList ) ;
738
+ return ;
726
739
}
727
740
728
741
// Build array of repos to search, they're interleaved across all dependencies as the
@@ -1751,7 +1764,7 @@ internal virtual bool ShouldExplode(string aarPath) {
1751
1764
if ( aarPath . EndsWith ( ".aar" ) &&
1752
1765
PlayServicesResolver . ExtractZip (
1753
1766
aarPath , new string [ ] { manifestFilename , "jni" , classesFilename } ,
1754
- temporaryDirectory ) ) {
1767
+ temporaryDirectory , false ) ) {
1755
1768
string manifestPath = Path . Combine ( temporaryDirectory ,
1756
1769
manifestFilename ) ;
1757
1770
if ( File . Exists ( manifestPath ) ) {
@@ -1904,7 +1917,9 @@ internal static bool ProcessAar(string dir, string aarFile, bool antProject,
1904
1917
return false ;
1905
1918
}
1906
1919
Directory . CreateDirectory ( workingDir ) ;
1907
- if ( ! PlayServicesResolver . ExtractZip ( aarFile , null , workingDir ) ) return false ;
1920
+ if ( ! PlayServicesResolver . ExtractZip ( aarFile , null , workingDir , false ) ) {
1921
+ return false ;
1922
+ }
1908
1923
PlayServicesResolver . ReplaceVariablesInAndroidManifest (
1909
1924
Path . Combine ( workingDir , "AndroidManifest.xml" ) ,
1910
1925
PlayServicesResolver . GetAndroidApplicationId ( ) ,
@@ -2045,35 +2060,5 @@ internal static bool ProcessAar(string dir, string aarFile, bool antProject,
2045
2060
}
2046
2061
return true ;
2047
2062
}
2048
-
2049
- /// <summary>
2050
- /// Extract a list of embedded resources to the specified path creating intermediate
2051
- /// directories if they're required.
2052
- /// </summary>
2053
- /// <param name="resourceNameToTargetPath">Each Key is the resource to extract and each
2054
- /// Value is the path to extract to.</param>
2055
- protected static void ExtractResources ( List < KeyValuePair < string , string > >
2056
- resourceNameToTargetPaths ) {
2057
- foreach ( var kv in resourceNameToTargetPaths ) ExtractResource ( kv . Key , kv . Value ) ;
2058
- }
2059
-
2060
- /// <summary>
2061
- /// Extract an embedded resource to the specified path creating intermediate directories
2062
- /// if they're required.
2063
- /// </summary>
2064
- /// <param name="resourceName">Name of the resource to extract.</param>
2065
- /// <param name="targetPath">Target path.</param>
2066
- protected static void ExtractResource ( string resourceName , string targetPath ) {
2067
- Directory . CreateDirectory ( Path . GetDirectoryName ( targetPath ) ) ;
2068
- var stream = typeof ( GradleResolver ) . Assembly . GetManifestResourceStream ( resourceName ) ;
2069
- if ( stream == null ) {
2070
- UnityEngine . Debug . LogError ( String . Format ( "Failed to find resource {0} in assembly" ,
2071
- resourceName ) ) ;
2072
- return ;
2073
- }
2074
- var data = new byte [ stream . Length ] ;
2075
- stream . Read ( data , 0 , ( int ) stream . Length ) ;
2076
- File . WriteAllBytes ( targetPath , data ) ;
2077
- }
2078
2063
}
2079
2064
}
0 commit comments