Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions Documentation/DevelopmentTips.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,39 +148,39 @@ make variable:
## Running Individual `.apk` Projects

See also the [`tests/RunApkTests.targets`](../tests/RunApkTests.targets) and
[`build-tools/scripts/UnitTestApks.targets`](../build-tools/scripts/UnitTestApks.targets)
[`build-tools/scripts/TestApks.targets`](../build-tools/scripts/TestApks.targets)
files.

All `.apk`-based unit test projects provide the following targets:

* `DeployUnitTestApks`: Installs the associated `.apk` to an Android device.
* `UndeployUnitTestApks`: Uninstalls the associated `.apk` from an Android device.
* `RunUnitTestApks`: Executes the unit tests contained within a `.apk`.
Must be executed *after* the `DeployUnitTestApks` target.
* `DeployTestApks`: Installs the associated `.apk` to an Android device.
* `UndeployTestApks`: Uninstalls the associated `.apk` from an Android device.
* `RunTestApks`: Executes the unit tests contained within a `.apk`.
Must be executed *after* the `DeployTestApks` target.

To run an individual `.apk`-based test project, a package must be built, using the
`SignAndroidPackage` target, installed, and executed.

For example:

$ tools/scripts/xabuild /t:SignAndroidPackage tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj
$ tools/scripts/xabuild /t:DeployUnitTestApks tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj
$ tools/scripts/xabuild /t:RunUnitTestApks tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj
$ tools/scripts/xabuild /t:DeployTestApks tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj
$ tools/scripts/xabuild /t:RunTestApks tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj

### Running A Single Test Fixture

A single NUnit *Test Fixture* -- a class with the `[TestFixture]`
custom attribute -- may be executed instead of executing *all* test fixtures.

The `RunUnitTestApks` target accepts a `TestFixture` MSBuild property
The `RunTestApks` target accepts a `TestFixture` MSBuild property
to specify the test fixture class to execute:

$ tools/scripts/xabuild /t:RunUnitTestApks \
$ tools/scripts/xabuild /t:RunTestApks \
/p:TestFixture=Xamarin.Android.LocaleTests.SatelliteAssemblyTests \
tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj

If using `Xamarin.Android.NUnitLite` for projects outside the `xamarin-android`
repository, such as NUnit tests for a custom app, the `RunUnitTestApks` target
repository, such as NUnit tests for a custom app, the `RunTestApks` target
will not exist. In such scenarios, the [`adb shell am`][adb-shell-am]
`instrument` command can be used instead. It follows the format:

Expand Down
8 changes: 8 additions & 0 deletions Xamarin.Android-Tests.sln
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.BindingReso
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.BindingResolveImports-Tests", "tests\ResolveImports\Xamarin.Android.BindingResolveImports-Tests\Xamarin.Android.BindingResolveImports-Tests.csproj", "{B297008B-C313-455E-B230-E119589D2D79}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xamarin.Forms.Performance.Integration", "tests\Xamarin.Forms-Performance-Integration\Xamarin.Forms.Performance.Integration.shproj", "{195BE9C2-1F91-40DC-BD6D-DE860BF083FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Performance.Integration.Droid", "tests\Xamarin.Forms-Performance-Integration\Droid\Xamarin.Forms.Performance.Integration.Droid.csproj", "{576312CC-83FF-48B1-A473-488CDC7121AD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -115,6 +119,10 @@ Global
{B297008B-C313-455E-B230-E119589D2D79}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B297008B-C313-455E-B230-E119589D2D79}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B297008B-C313-455E-B230-E119589D2D79}.Release|Any CPU.Build.0 = Release|Any CPU
{576312CC-83FF-48B1-A473-488CDC7121AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{576312CC-83FF-48B1-A473-488CDC7121AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{576312CC-83FF-48B1-A473-488CDC7121AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{576312CC-83FF-48B1-A473-488CDC7121AD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{2305B00D-DE81-4744-B0DA-357835CAFE5A} = {43A4FB09-279A-4138-8027-EC1E1CED2E8A}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Xamarin.Android.Tools.BootstrapTasks.dll" TaskName="Xamarin.Android.Tools.BootstrapTasks.CheckAdbTarget" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Xamarin.Android.Tools.BootstrapTasks.dll" TaskName="Xamarin.Android.Tools.BootstrapTasks.CreateAndroidEmulator" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Xamarin.Android.Tools.BootstrapTasks.dll" TaskName="Xamarin.Android.Tools.BootstrapTasks.RunInstrumentationTests" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Xamarin.Android.Tools.BootstrapTasks.dll" TaskName="Xamarin.Android.Tools.BootstrapTasks.RunUITests" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Xamarin.Android.Tools.BootstrapTasks.dll" TaskName="Xamarin.Android.Tools.BootstrapTasks.StartAndroidEmulator" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Xamarin.Android.Tools.BootstrapTasks.dll" TaskName="Xamarin.Android.Tools.BootstrapTasks.KillProcess" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.Sleep" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.ProcessLogcatTiming" />

<PropertyGroup>
<_TestImageName>XamarinAndroidUnitTestRunner</_TestImageName>
<_TestImageName>XamarinAndroidTestRunner</_TestImageName>
<_AdbEmulatorPort>5570</_AdbEmulatorPort>
</PropertyGroup>

Expand Down Expand Up @@ -107,54 +108,62 @@

<!--
<ItemGroup>
<UnitTestApk Include="ApkFile">
<TestApk Include="ApkFile">
<Package></Package>
<InstrumentationType></InstrumentationType>
<ResultsPath></ResultsPath>
</UnitTestApk>
</TestApk>
</ItemGroup>
-->

<Target Name="DeployUnitTestApks"
Condition=" '@(UnitTestApk)' != '' ">
<Target Name="DeployTestApks"
Condition=" '@(TestApk)' != '' ">
<Xamarin.Android.Tools.BootstrapTasks.Adb
Arguments="$(_AdbTarget) $(AdbOptions) install &quot;%(UnitTestApk.Identity)&quot;"
Arguments="$(_AdbTarget) $(AdbOptions) install &quot;%(TestApk.Identity)&quot;"
ToolExe="$(AdbToolExe)"
ToolPath="$(AdbToolPath)"
/>
</Target>

<Target Name="UndeployUnitTestApks"
Condition=" '@(UnitTestApk)' != '' ">
<Target Name="UndeployTestApks"
Condition=" '@(TestApk)' != '' ">
<Xamarin.Android.Tools.BootstrapTasks.Adb
Arguments="$(_AdbTarget) $(AdbOptions) uninstall &quot;%(UnitTestApk.Package)&quot;"
Arguments="$(_AdbTarget) $(AdbOptions) uninstall &quot;%(TestApk.Package)&quot;"
ToolExe="$(AdbToolExe)"
ToolPath="$(AdbToolPath)"
/>
</Target>

<Target Name="RunUnitTestApks"
Condition=" '@(UnitTestApk)' != '' ">
<Target Name="RunTestApks"
Condition=" '@(TestApk)' != '' ">
<RunInstrumentationTests
Condition=" '%(TestApk.InstrumentationType)' != ''"
AdbTarget="$(_AdbTarget)"
AdbOptions="$(AdbOptions)"
Component="%(UnitTestApk.Package)/%(UnitTestApk.InstrumentationType)"
NUnit2TestResultsFile="%(UnitTestApk.ResultsPath)"
Component="%(TestApk.Package)/%(TestApk.InstrumentationType)"
NUnit2TestResultsFile="%(TestApk.ResultsPath)"
TestFixture="$(TestFixture)"
ToolExe="$(AdbToolExe)"
ToolPath="$(AdbToolPath)">
<Output TaskParameter="FailedToRun" ItemName="_FailedComponent"/>
</RunInstrumentationTests>
<RunUITests
Condition=" '%(TestApk.Activity)' != '' "
AdbTarget="$(_AdbTarget)"
AdbOptions="$(AdbOptions)"
Activity="%(TestApk.Activity)">
</RunUITests>
<PropertyGroup>
<_LogcatFilename>logcat-$(Configuration)$(_AotName).txt</_LogcatFilename>
</PropertyGroup>
<Exec Command="&quot;$(AdbToolPath)\$(AdbToolExe)&quot; $(_AdbTarget) $(AdbOptions) logcat -v threadtime -d > $(_LogcatFilename)" />
<ProcessLogcatTiming
Condition=" '%(UnitTestApk.TimingDefinitionsFilename)' != '' "
Condition=" '%(TestApk.TimingDefinitionsFilename)' != '' "
InputFilename="$(_LogcatFilename)"
ApplicationPackageName="%(UnitTestApk.Package)"
ResultsFilename="%(UnitTestApk.ResultsPath)"
DefinitionsFilename="%(UnitTestApk.TimingDefinitionsFilename)"
AddResults="true" />
ApplicationPackageName="%(TestApk.Package)"
ResultsFilename="%(TestApk.ResultsPath)"
DefinitionsFilename="%(TestApk.TimingDefinitionsFilename)"
AddResults="true"
Activity="%(TestApk.Activity)" />
</Target>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,16 @@ namespace Xamarin.Android.BuildTools.PrepTasks
{
public class ProcessLogcatTiming : ProcessPlotInput
{
public string Activity { get; set; }

public override bool Execute ()
{
LoadDefinitions ();
using (var reader = new StreamReader (InputFilename)) {
string line;
int pid = -1;
var procStartRegex = new Regex ($@"^(?<timestamp>\d+-\d+\s+[\d:\.]+)\s+.*ActivityManager: Start proc.*for added application {ApplicationPackageName}: pid=(?<pid>\d+)");
var procIdentification = string.IsNullOrEmpty (Activity) ? $"added application {ApplicationPackageName}" : $"activity {Activity}";
var procStartRegex = new Regex ($@"^(?<timestamp>\d+-\d+\s+[\d:\.]+)\s+.*ActivityManager: Start proc.*for {procIdentification}: pid=(?<pid>\d+)");
Regex timingRegex = null;
DateTime start = DateTime.Now;
DateTime last = start;
Expand Down
6 changes: 3 additions & 3 deletions src/Mono.Android/Test/Mono.Android-Tests.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
<_MonoAndroidTestApkSizesInput>apk-sizes-$(_MonoAndroidTestPackage)-$(Configuration)$(_AotName).txt</_MonoAndroidTestApkSizesInput>
</PropertyGroup>
<ItemGroup>
<UnitTestApk Include="$(_MonoAndroidTestApkFile)">
<TestApk Include="$(_MonoAndroidTestApkFile)">
<Package>$(_MonoAndroidTestPackage)</Package>
<InstrumentationType>xamarin.android.runtimetests.TestInstrumentation</InstrumentationType>
<ResultsPath>$(_MonoAndroidTestResultsPath)</ResultsPath>
<TimingDefinitionsFilename>$(MSBuildThisFileDirectory)timing-definitions-$(Configuration)$(_AotName).txt</TimingDefinitionsFilename>
</UnitTestApk>
</TestApk>
</ItemGroup>
<Target Name="_RecordApkSizes" AfterTargets="DeployUnitTestApks">
<Target Name="_RecordApkSizes" AfterTargets="DeployTestApks">
<Delete Files="$(MSBuildThisFileDirectory)..\..\..\TestResult-Mono.Android_Tests-values.csv;$(MSBuildThisFileDirectory)..\..\..\TestResult-Mono.Android_Tests-times.csv" Condition=" '$(Configuration)' == 'Debug' " />
<Exec Condition=" '$(HostOS)' == 'Darwin' " Command="stat -f &quot;stat: %z %N&quot; &quot;$(_MonoAndroidTestApkFile)&quot; > $(_MonoAndroidTestApkSizesInput)" />
<Exec Condition=" '$(HostOS)' == 'Linux' " Command="stat -c &quot;stat: %s %N&quot; &quot;$(_MonoAndroidTestApkFile)&quot; > $(_MonoAndroidTestApkSizesInput)" />
Expand Down
2 changes: 1 addition & 1 deletion src/Mono.Android/Test/Mono.Android-Tests.targets
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<AndroidNativeLibrary Include="libs\x86_64\libreuse-threads.so" />
</ItemGroup>
<Import Project="Mono.Android-Tests.projitems" />
<Import Project="..\..\..\build-tools\scripts\UnitTestApks.targets" />
<Import Project="..\..\..\build-tools\scripts\TestApks.targets" />
<Target Name="BuildNativeLibs"
BeforeTargets="Build"
DependsOnTargets="AndroidPrepareForBuild"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,12 @@
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\GenerateMonoDroidIncludes.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\GenerateProfile.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\GetNugetPackageBasePath.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\RunInstrumentationTests.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\StartAndroidEmulator.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\UnzipDirectoryChildren.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\Zip.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\KillProcess.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\RunUITests.cs" />
<Compile Include="Xamarin.Android.Tools.BootstrapTasks\RunInstrumentationTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\external\LibZipSharp\libZipSharp.csproj">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class CreateAndroidEmulator : Task

public string TargetId {get; set;}

public string ImageName {get; set;} = "XamarinAndroidUnitTestRunner";
public string ImageName {get; set;} = "XamarinAndroidTestRunner";

public override bool Execute ()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Microsoft.Build.Framework;

namespace Xamarin.Android.Tools.BootstrapTasks
{
public class RunUITests : Adb
{
public string AdbTarget { get; set; }
public string AdbOptions { get; set; }

[Required]
public string Activity { get; set; }

protected override bool LogTaskMessages {
get { return false; }
}

public override bool Execute ()
{
Log.LogMessage (MessageImportance.Low, $"Task {nameof (RunUITests)}");
Log.LogMessage (MessageImportance.Low, $" {nameof (AdbTarget)}: {AdbTarget}");
Log.LogMessage (MessageImportance.Low, $" {nameof (AdbOptions)}: {AdbOptions}");
Log.LogMessage (MessageImportance.Low, $" {nameof (Activity)}: {Activity}");

base.Execute ();

Log.LogMessage(MessageImportance.Low, $" going to wait for 15 seconds");
System.Threading.Thread.Sleep (15000);

return !Log.HasLoggedErrors;
}

protected override string GenerateCommandLineCommands ()
{
return $"{AdbTarget} {AdbOptions} shell am start -n \"{Activity}\"";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class StartAndroidEmulator : Task

public string AndroidSdkHome {get; set;}
public string Port {get; set;}
public string ImageName {get; set;} = "XamarinAndroidUnitTestRunner";
public string ImageName {get; set;} = "XamarinAndroidTestRunner";
public string ToolPath {get; set;}
public string ToolExe {get; set;}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<UnitTestApk Include="$(OutputPath)Xamarin.Android.JcwGen_Tests-Signed.apk">
<TestApk Include="$(OutputPath)Xamarin.Android.JcwGen_Tests-Signed.apk">
<Package>Xamarin.Android.JcwGen_Tests</Package>
<InstrumentationType>xamarin.android.jcwgentests.TestInstrumentation</InstrumentationType>
<ResultsPath>$(MSBuildThisFileDirectory)..\..\..\TestResult-Xamarin.Android.JcwGen_Tests.xml</ResultsPath>
<TimingDefinitionsFilename>$(MSBuildThisFileDirectory)..\..\..\build-tools\scripts\TimingDefinitions.txt</TimingDefinitionsFilename>
</UnitTestApk>
</TestApk>
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="Xamarin.Android.JcwGen-Tests.projitems" />
<Import Project="..\..\..\build-tools\scripts\UnitTestApks.targets" />
<Import Project="..\..\..\build-tools\scripts\TestApks.targets" />
<Target Name="BuildNativeLibs"
DependsOnTargets="AndroidPrepareForBuild"
Inputs="jni\Android.mk;jni\timing.c"
Expand Down
11 changes: 6 additions & 5 deletions tests/RunApkTests.targets
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,20 @@
<_AotName Condition=" '$(AotAssemblies)' == 'true' ">-Aot</_AotName>
</PropertyGroup>
<!--
Note that the `.csproj` for each `@(UnitTestApk)` entry *must* be added to
Note that the `.csproj` for each `@(TestApk)` entry *must* be added to
`$(TEST_APK_PROJECTS)` in the toplevel Makefile so that the `.apk` is built.
-->
<Import Project="..\src\Mono.Android\Test\Mono.Android-Tests.projitems" />
<Import Project="..\tests\CodeGen-Binding\Xamarin.Android.JcwGen-Tests\Xamarin.Android.JcwGen-Tests.projitems" Condition=" '$(Configuration)' == 'Debug' " />
<Import Project="..\tests\locales\Xamarin.Android.Locale-Tests\Xamarin.Android.Locale-Tests.projitems" Condition=" '$(Configuration)' == 'Debug' " />
<Import Project="..\build-tools\scripts\UnitTestApks.targets" />
<Import Project="..\tests\Xamarin.Forms-Performance-Integration\Droid\Xamarin.Forms.Performance.Integration.Droid.projitems" Condition=" '$(Configuration)' == 'Release' " />
<Import Project="..\build-tools\scripts\TestApks.targets" />
<PropertyGroup>
<RunApkTestsDependsOn>
AcquireAndroidTarget;
UndeployUnitTestApks;
DeployUnitTestApks;
RunUnitTestApks;
UndeployTestApks;
DeployTestApks;
RunTestApks;
ReleaseAndroidTarget
</RunApkTestsDependsOn>
</PropertyGroup>
Expand Down
18 changes: 18 additions & 0 deletions tests/Xamarin.Forms-Performance-Integration/App.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Xamarin.Forms.Performance.Integration.App">
<Application.Resources>
<ResourceDictionary>
<Color x:Key="Primary">#2196F3</Color>
<Color x:Key="PrimaryDark">#1976D2</Color>
<Color x:Key="Accent">#96d1ff</Color>
<Color x:Key="LightBackgroundColor">#FAFAFA</Color>
<Color x:Key="DarkBackgroundColor">#C0C0C0</Color>
<Color x:Key="MediumGrayTextColor">#4d4d4d</Color>
<Color x:Key="LightTextColor">#999999</Color>
<Style TargetType="NavigationPage">
<Setter Property="BarBackgroundColor" Value="{StaticResource Primary}" />
<Setter Property="BarTextColor" Value="White" />
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
27 changes: 27 additions & 0 deletions tests/Xamarin.Forms-Performance-Integration/App.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System;

using Xamarin.Forms;

namespace Xamarin.Forms.Performance.Integration
{
public partial class App : Application
{
public static bool UseMockDataStore = true;
public static string BackendUrl = "https://localhost:5000";

public App ()
{
InitializeComponent ();

if (UseMockDataStore)
DependencyService.Register<MockDataStore> ();
else
DependencyService.Register<CloudDataStore> ();

if (Device.RuntimePlatform == Device.iOS)
MainPage = new MainPage ();
else
MainPage = new NavigationPage (new MainPage ());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Any raw assets you want to be deployed with your application can be placed in
this directory (and child directories) and given a Build Action of "AndroidAsset".

These files will be deployed with your package and will be accessible using Android's
AssetManager, like this:

public class ReadAsset : Activity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);

InputStream input = Assets.Open ("my_asset.txt");
}
}

Additionally, some Android functions will automatically load asset files:

Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
Loading