Exemplo n.º 1
0
		public ClassLoader getClassLoader ()
		{
			if (mClassLoader != null)
				return mClassLoader;

			ContextImpl context = mActivityThread.getSystemContext();
			XobotPackageManager pm = (XobotPackageManager)context.getPackageManager ();

			Assembly asm = pm.GetAssembly (mPackageName);
			mClassLoader = new AssemblyClassLoader (asm, mPackageName);
			return mClassLoader;
		}
Exemplo n.º 2
0
 public static object GetAssemblyClassLoader(Assembly asm)
 {
     return(AssemblyClassLoader.FromAssembly(asm).GetJavaClassLoader());
 }
Exemplo n.º 3
0
 public static global::java.lang.ClassLoader GetAssemblyClassLoader(Assembly asm)
 {
     return(AssemblyClassLoader.FromAssembly(asm).GetJavaClassLoader());
 }
Exemplo n.º 4
0
 public static void addBootClassPathAssembly(Assembly asm)
 {
     ClassLoaderWrapper.GetBootstrapClassLoader().AddDelegate(AssemblyClassLoader.FromAssembly(asm));
 }
Exemplo n.º 5
0
 /// <summary>
 /// For all explicitly and implicitly loaded assemblies the classloader
 /// and the callback will be invoked, if not null. Callback and classloader
 /// might be called reentrantly, if the AssemblyResolver itself is used reentrantly.
 /// </summary>
 public AssemblyResolver(IEnumerable <string> referenceFolders, AssemblyClassLoader classLoader, Action <AssemblyDefinition> assemblyLoaded)
 {
     this.classLoader      = classLoader;
     this.assemblyLoaded   = assemblyLoaded;
     this.referenceFolders = referenceFolders.Select(ToFolder).Distinct().ToList();
 }
Exemplo n.º 6
0
 /// <summary>
 /// Default ctor
 /// </summary>
 public TypeNameMap(ITypeMapResolver resolver, AssemblyClassLoader assemblyClassLoader)
 {
     this.resolver            = resolver;
     this.assemblyClassLoader = assemblyClassLoader;
 }
Exemplo n.º 7
0
 /// <summary>
 /// Default ctor
 /// </summary>
 public AssemblyCompiler(CompilationMode mode, List <AssemblyDefinition> assemblies, List <AssemblyDefinition> references, Table resources, NameConverter nameConverter, bool generateDebugInfo, AssemblyClassLoader assemblyClassLoader,
                         HashSet <string> rootClassNames, XModule module)
 {
     this.mode                = mode;
     this.assemblies          = assemblies;
     this.references          = references;
     this.resources           = resources;
     this.generateDebugInfo   = generateDebugInfo;
     this.assemblyClassLoader = assemblyClassLoader;
     this.rootClassNames      = rootClassNames;
     this.module              = module;
     targetPackage            = new Target.Dex.DexTargetPackage(nameConverter, this);
 }
Exemplo n.º 8
0
        /// <summary>
        /// Compile an assembly into a dex file.
        /// </summary>
        private static void CompileAssembly(CommandLineOptions options, NameConverter nsConverter)
        {
            // Load resource type usage info file
            var usedTypeNames = LoadResourceTypeUsageInformation(options);


            // Load assemblies
            List <AssemblyDefinition> assemblies = new List <AssemblyDefinition>();
            List <AssemblyDefinition> references = new List <AssemblyDefinition>();

            var dxJarCompiler = options.EnableDxJarCompilation
                ? new DxClassfileMethodBodyCompiler(options.OutputFolder, options.DebugInfo)
                : null;
            Action <ClassSource> jarLoaded = dxJarCompiler != null ? dxJarCompiler.PreloadJar : (Action <ClassSource>)null;

            var module      = new XModule();
            var classLoader = new AssemblyClassLoader(module.OnClassLoaded);
            var resolver    = new AssemblyResolver(options.ReferenceFolders, classLoader, module.OnAssemblyLoaded);

            // initialize compiler cache in background.
            var ccache = options.EnableCompilerCache ? new DexMethodBodyCompilerCache(options.OutputFolder, resolver.GetFileName)
                                                     : new DexMethodBodyCompilerCache();

            var readerParameters = new ReaderParameters
            {
                AssemblyResolver     = resolver,
                SymbolReaderProvider = new SafeSymbolReaderProvider(),
                ReadSymbols          = true,
                ReadingMode          = ReadingMode.Immediate
            };

            // load assemblies
            var toLoad = options.Assemblies.Select(path => new { path, target = assemblies })
                         .Concat(options.References.Select(path => new { path, target = references }))
                         // Some micro optimizations...
                         // Our startup is IO bound until we have loaded first assembly from disk.
                         // So just load from smallest to largest.
                         .Select(load => new { load.path, load.target, length = new FileInfo(resolver.ResolvePath(load.path)).Length })
                         .OrderBy(load => load.length)
                         .ToList();

            using (AssemblyCompiler.Profile("for loading assemblies"))
            {
                toLoad.AsParallel().ForAll(
                    //toLoad.ForEach(
                    load =>
                {
                    var assm = resolver.Load(load.path, readerParameters);
                    lock (load.target) load.target.Add(assm);
                });
            }

            // Load resources
            Table table;

            using (var stream = new FileStream(options.InputResources, FileMode.Open, FileAccess.Read))
            {
                table = new Table(stream);
            }

            // Create compiler
            var compiler = new AssemblyCompiler(options.CompilationMode, assemblies, references, table, nsConverter,
                                                options.DebugInfo, classLoader, resolver.GetFileName, ccache,
                                                usedTypeNames, module, options.GenerateSetNextInstructionCode);

            compiler.DxClassfileMethodBodyCompiler = dxJarCompiler;
            using (AssemblyCompiler.Profile("total compilation time", true))
                compiler.Compile();

            ccache.PrintStatistics();

            using (AssemblyCompiler.Profile("saving results"))
                compiler.Save(options.OutputFolder, options.FreeAppsKeyPath);
        }