Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add NeoML test for android #193

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
00b1d20
Add MKL_USE_STATIC_LIBS in FindMKL.cmake
TemplateVoid Jun 16, 2020
6ed0546
Some refactoring
TemplateVoid Jun 17, 2020
cc8c300
Small fix
TemplateVoid Jun 17, 2020
9ce232b
Merge branch 'master' into master
SAngeliuk Jun 18, 2020
856f163
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jun 25, 2020
c0cf084
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jun 28, 2020
59d0fd5
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jul 6, 2020
81d94b8
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jul 9, 2020
6e505b7
Merge remote-tracking branch 'upstream/master'
TemplateVoid Sep 28, 2020
22dd79c
Merge remote-tracking branch 'upstream/master'
TemplateVoid Oct 6, 2020
70ca799
Merge remote-tracking branch 'upstream/master'
TemplateVoid Oct 6, 2020
1bc268a
Merge remote-tracking branch 'upstream/master'
TemplateVoid Nov 3, 2020
d4cd766
Merge remote-tracking branch 'upstream/master'
TemplateVoid Nov 19, 2020
22988e8
Merge remote-tracking branch 'upstream/master'
TemplateVoid Nov 27, 2020
4d8368b
Merge remote-tracking branch 'upstream/master'
TemplateVoid Dec 14, 2020
52ab0a9
Merge remote-tracking branch 'upstream/master'
TemplateVoid Dec 16, 2020
bd65545
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jan 12, 2021
25c73f8
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jan 13, 2021
c6698b7
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jan 13, 2021
eb9a08b
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jan 14, 2021
9eb2672
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jan 18, 2021
323ddae
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jan 18, 2021
d6e7238
Merge remote-tracking branch 'upstream/master'
TemplateVoid Jan 20, 2021
cf14c33
Add android test for neoml
TemplateVoid Jan 20, 2021
e87e9b4
Merge branch 'master' into NeoMLTestAndroid
TemplateVoid Mar 30, 2021
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
8 changes: 8 additions & 0 deletions NeoML/test/android/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
*.iml
.gradle
/local.properties
/.idea
.DS_Store
/build
/captures
.externalNativeBuild
1 change: 1 addition & 0 deletions NeoML/test/android/app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
55 changes: 55 additions & 0 deletions NeoML/test/android/app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 26
buildToolsVersion '29.0.3'

defaultConfig {
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
}
applicationId "com.neoml.test"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
}

buildTypes {
debug {
jniDebuggable = true
debuggable = true

minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "src/main/jni/CMakeLists.txt"
version "3.11.0+"
}
}
}

task copyTestData(type: Copy) {
from('../../data')
into('src/main/assets/data')
}

afterEvaluate {
android.applicationVariants.all { variant ->
variant.javaCompiler.dependsOn(copyTestData)
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:design:26.1.0'
}
21 changes: 21 additions & 0 deletions NeoML/test/android/app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
24 changes: 24 additions & 0 deletions NeoML/test/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.neoml.test">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
105 changes: 105 additions & 0 deletions NeoML/test/android/app/src/main/java/com/neoml/test/MainActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package com.neoml.test;

import android.content.Context;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.widget.TextView;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;

import android.os.AsyncTask;
import android.os.ParcelFileDescriptor;

import android.system.Os;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {
class LogTask extends AsyncTask<ParcelFileDescriptor, String, Void> {
@Override
protected Void doInBackground(ParcelFileDescriptor... fds) {
try {
ParcelFileDescriptor.AutoCloseInputStream stream =
new ParcelFileDescriptor.AutoCloseInputStream(fds[0]);
BufferedReader buffReader = new BufferedReader(new InputStreamReader(stream));
String line;
while ((line = buffReader.readLine()) != null) {
android.util.Log.d(Tag, line);
publishProgress(line); // pass the data to onProgressUpdate
}
} catch (Exception exception) {
android.util.Log.e(Tag, "Except in log thread", exception);
}
return null;
}

@Override
protected void onProgressUpdate(String... log) {
TextView tv = (TextView) findViewById(R.id.logView);
for (String line: log) {
tv.append(line);
tv.append("\n");
}
}
}
public native void RunTests( Object assetManager );

static AssetManager assetManager;
static Context context;
static String Tag = "NeoMLTest";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

assetManager = getAssets();
context = getApplicationContext();

setContentView(R.layout.activity_main);
// Example of a call to a native method
System.loadLibrary("NeoMLTestJni");

try {
ParcelFileDescriptor pipe[] = ParcelFileDescriptor.createPipe();
Os.dup2(pipe[1].getFileDescriptor(), 1); // stdout
Os.dup2(pipe[1].getFileDescriptor(), 2); // stderr
pipe[1].close();

new LogTask().execute(pipe[0]);

new Thread(new Runnable() {
public void run() {
RunTests(assetManager);
}
}).start();

} catch (Exception exception) {
android.util.Log.e(Tag, "Except", exception);
}
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}
26 changes: 26 additions & 0 deletions NeoML/test/android/app/src/main/jni/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)

project(NeoMLTestJni)

set(NeoML_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../..)

list(APPEND CMAKE_MODULE_PATH ${NeoML_DIR}/cmake)

include(Utils)

set(NeoMathEngine_BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(NeoML_BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(NeoOnnx_BUILD OFF CACHE BOOL "" FORCE)
add_subdirectory(${NeoML_DIR}/NeoML ${CMAKE_BINARY_DIR}/NeoML)

add_subdirectory(${NeoML_DIR}/NeoML/test/src ${CMAKE_BINARY_DIR}/NeoML/test/src)

add_library(${PROJECT_NAME} SHARED
NeoMLTestJni.cpp
)

add_gtest_target()

target_link_libraries(${PROJECT_NAME} PRIVATE NeoMLTestSrc NeoML gtest)

configure_target(${PROJECT_NAME})
10 changes: 10 additions & 0 deletions NeoML/test/android/app/src/main/jni/NeoMLTestJni.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include <jni.h>
#include <TestFixture.h>

extern "C"
JNIEXPORT void JNICALL Java_com_neoml_test_MainActivity_RunTests( JNIEnv *, jobject, jobject assetManager )
{
int argc = 2;
char* argv[2] = {"--MathEngine=cpu", "--gtest_filter=*"};
NeoMLTest::RunTests( argc, argv, assetManager );
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>
Loading