You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@flink.apache.org by Alexander Borgschulze <Al...@stud.uni-regensburg.de> on 2021/03/03 20:43:46 UTC

Antw: [EXT] Re: Running Apache Flink on Android

Hey,

Thanks for your answer :)
For my Master's thesis,I want to test and evaluate the use of CEP technologies
for detecting Complex Patterns in Android sensor data (Floating Phone Data).
Apache Flink offers a CEP library, so I thought it would be an interesting
option. The data sources would be the sensors (Gyroscope and Accelerometer).
Then I want to find patterns in this sensor data stream. This would be my
usecase. 
But I am struggling with runnning a minimum working example. The execution
outside of Android is not the problem. But I thought, that there might be a way
to run Flink (CEP) on Android




>>> Piotr Nowojski <pn...@apache.org> 03.03.21 21.22 Uhr >>>
Hi,
The question would be, why do you want to do it? I think it might be possible,
but probably nobody has ever tested it. Flink is a distributed system, so
running it on an Android phone doesn't make much sense.

I would suggest you first make your app/example work outside of Android. To
make sure that dependencies and project setup is correct. Keep in mind that you
also need to start somehow a Flink cluster. I would expect that starting a
minicluster with a local execution environment
(StreamExecutionEnvironment.createLocalEnvironment(...) instead of
StreamExecutionEnvironment.getExecutionEnvironment()) would be the way to go. 
Unless you want to run a distributed cluster across multiple Android phones,
but in that case I really don't know why you would like to do it :)

Also, Android has its own JDK, which we have never tested. It might cause some
problems.

Piotrek


wt., 2 mar 2021 o 16:23 Alexander Borgschulze
<Al...@stud.uni-regensburg.de> napisaƂ(a):


I was trying to run Apache Flink within an Android App. I just want to run a
minimum working example, like this:@Overrideprotected void onCreate(Bundle
savedInstanceState) {    super.onCreate(savedInstanceState);   
setContentView(R.layout.activity_main);    runFlinkExample();}private void
runFlinkExample() {    StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();    DataStream<Integer>
stream = env.fromCollection(Arrays.asList(1, 2, 3, 4, 5));    stream.print();  
 try {        env.execute();    } catch (Exception e) {       
e.printStackTrace();    }} 
These are my two .gradle files:


build.gradle (Module)

 
plugins {    id 'com.android.application'}android {    compileSdkVersion 30   
buildToolsVersion "30.0.3"    defaultConfig {        applicationId
"com.example.flink"        minSdkVersion 26        targetSdkVersion 30       
versionCode 1        versionName "1.0"        testInstrumentationRunner
"androidx.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {
           minifyEnabled false            proguardFiles
getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'  
     }    }    compileOptions {        sourceCompatibility
JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }
   packagingOptions {        exclude 'META-INF/DEPENDENCIES'        exclude
'reference.conf'    }}dependencies {    implementation
'androidx.appcompat:appcompat:1.2.0'    implementation
'com.google.android.material:material:1.3.0'    implementation
'androidx.constraintlayout:constraintlayout:2.0.4'    testImplementation
'junit:junit:4.+'    androidTestImplementation 'androidx.test.ext:junit:1.1.2' 
  androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'    //
Flink    implementation 'org.apache.flink:flink-streaming-java_2.12:1.12.1'   
implementation 'org.apache.flink:flink-clients_2.12:1.12.1'} 
build.gradle (Project)

// Top-level build file where you can add configuration options common to all
sub-projects/modules.buildscript {    repositories {        google()       
jcenter()    }    dependencies {        classpath
"com.android.tools.build:gradle:4.1.2"        // NOTE: Do not place your
application dependencies here; they belong        // in the individual module
build.gradle files    }}allprojects {jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}
 
The first problem is, that I get the following Error:Caused by:
java.lang.ClassNotFoundException: Didn't find class
"org.apache.flink.streaming.api.environment.StreamExecutionEnvironment" on
path: DexPathList[[zip file "/data/app/~~DbT_CZ7AhLED2xZgLBk ....

 
In cases there this error doesn't appear, I get Akka-Actor errors, because I
must exclude 'reference.conf', otherwise the code wouldn't compile. However,
this leads to more exceptions, e.g. missing akka-version.
So my general question is: Is it possible to run Flink within an Android-App?
Or is this not possible (recommended)? Perhaps someone knows how to modfiy my
gradle files (or something else) to run my example. Or perhaps someone already
has successfully used Flink in Android.