Commit 95818b03 authored by Hemant Mahsky's avatar Hemant Mahsky Committed by Madan Lanka

Added Multi PHY EasySetup Service

Change-Id: Ie8504d25c0f8c002737b8a82820e0af52944ca83
Signed-off-by: default avatarHemant Mahsky <h.mahsky@samsung.com>

Updated SConscript to build EasySetup

Change-Id: Ie8504d25c0f8c002737b8a82820e0af52944ca83
Signed-off-by: default avatarHemant Mahsky <h.mahsky@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/3229Tested-by: default avatarjenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: default avatarMadan Lanka <lanka.madan@samsung.com>
parent 250dbf66
......@@ -39,3 +39,7 @@ if target_os not in ['arduino','darwin']:
# Build simulator module
if target_os in ['linux'] and env.get('SIMULATOR', False):
SConscript('simulator/SConscript')
# Build EasySetup module
if target_os in ['arduino','android', 'linux']:
SConscript('easy-setup/SConscript')
=== Prerequisites ===
* 1. Scons
Please refer to the following page to install scons:
http://www.scons.org/doc/production/HTML/scons-user.html#chap-build-install
(Note: on Windows, install Python 2.x before installing scons)
* 2. IDE/SDK Pre-requites
To build for some OS (Android / Arduino / IOS ...), an IDE/SDK may be required,
please go to the relative page to download and install the required IDE/SDK.
Note: Connectivity module building has been changed. We have to build connectivity
from the iotivity root folder.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Android Build:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Steps to build and deploy Easysetup Mediator in Android platform
1) Compilation using Scons
0) Prerequisite exports for Android
export ANDROID_HOME=<ANDROID_HOME>
export ANDROID_NDK=<ANDROID_NDK>
a) In the IoTivity root source folder execute
scons TARGET_OS=android TARGET_ARCH=armeabi TARGET_TRANSPORT=IP RELEASE=0
b) If the project is setup correctly, you should see a BUILD SUCCESSFUL message on the terminal
You should see the .aar files generated inside of '<iotivity>/android/android_api/base/build/outputs/aar' directory. The .aar files contain jni directory and also a .jar file
c) Now navigate to the Easysetup NDK folder
<iotivity-root>/service/easy-setup/sdk/mediator/android
d) Execute NDK-Build with the following command to cross compiled Easysetup JNI .so files
<iotivity>/extlibs/android/ndk/android-ndk-r10d/ndk-build
e) Step (d) will generate cross compiled Easysetup JNI .so files in the following folder
<iotivity>/service/easy-setup/sdk/mediator/android/libs/armeabi
2) Compilation using Android Studio
0) Prerequisite for running the Android application
Install Android Studio and use the Android SDK manager to update the Android API to 21
a) Import following projects to the Studio using the "File->New->Import Project"
- service\easy-setup\sdk\android\EasySetupCore
- service\easy-setup\sampleapp\android\EasySetup
b) EasySetupCore is dependent on the .aar files generated in 1.b
1) To add an .aar file to the 'EasySetupCore' project,
a.Right click on EasySetup->New->Module->Import .JAR or .AAR Package
b.Select the .aar file(iotivity-armeabi-base-*.aar) from the location in steps 1.b
c.Right click on EasySetup->Open Module Settings
d.Select each sample app module under 'Modules'->Dependencies->Add->Module Dependency
c) Build EasySetupCore project using "Android Studio->Build->Make Module "easySetupCore"
If the project is setup correctly, you should see a BUILD SUCCESSFUL in the Android Studio Gradle Build terminal
You should see the .aar file generated inside of
'iotivity\service\easy-setup\sdk\mediator\android\easySetupCore\build\outputs\aar'
d) EasySetup application is also dependent on the .so files generated in 1.d step
1) Drag and drop the following .so files in to the EasySetup\app\src\main\jniLibs\armeabi folder
- libeasysetup-jni.so [Easy Setup file]
e) EasySetup is also dependent on the .aar files generated in 1.b and 2.c steps
1) To add an .aar file to the 'EasySetup' project,
a.Right click on EasySetup->New->Module->Import .JAR or .AAR Package
b.Select the .aar file from the location in steps 1.b and 2.b above
c.Right click on EasySetup->Open Module Settings
d.Select each sample app module under 'Modules'->Dependencies->Add->Module Dependency
e.The .aar files (easySetupCore-*.aar & iotivity-armeabi-base-*.aar) selected in step 2.c.1.b above should be present. Select it.
e) Run "Easy Setup" as an Android application
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Arduino Build:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Steps to build and deploy Easysetup Mediator in Arduino platform
1) Compilation using Scons for Arduino Due
a) Set up Arduino first before building. Refer to "connectivity\build\arduino\Arduino_Setup_README.txt" file for help.
b) Go to "iotivity/" folder.
c) Prerequisite exports for Arduino
export ARDUINO_HOME=<ARDUINO_HOME_DIR>
d) Start Arduino IDE. Select ""Tools->Port->Programming port"
e) scons TARGET_OS=arduino BOARD=arduino_due_x_dbg TARGET_ARCH=arm SHIELD=WIFI
- With debug or logging
scons TARGET_OS=arduino BOARD=arduino_due_x_dbg TARGET_ARCH=arm SHIELD=WIFI RELEASE=0
- With installation to Arduino
scons TARGET_OS=arduino BOARD=arduino_due_x_dbg TARGET_ARCH=arm SHIELD=WIFI RELEASE=0 UPLOAD=true
NOTE: BOARD=arduino_due_x_dbg|arduino_due_x. Default is arduino_due_x_dbg.
Possible values for <transport> are:
-> IP :
$ scons TARGET_OS=arduino BOARD=arduino_due_x_dbg TARGET_ARCH=arm SHIELD=WIFI RELEASE=0
-> BLE :
$ scons TARGET_OS=arduino BOARD=arduino_due_x_dbg TARGET_ARCH=arm SHIELD=WIFI RELEASE=0
Note :- Only single transport can be built at a time for Arduino
f) The above command will build sample. The "enrollee.hex" can be found at "out/arduino/arm/release/service/easy-setup/sampleapp/enrollee/arduino"
g) After building sample, script will try to install on "/dev/ttyACM0" port in 'sudo' mode.
To skip installation, set command line argument 'UPLOAD=false' or without UPLOAD option
h) To set BLE Shield Name, include the option DEVICE_NAME during scons build.
-> $ scons TARGET_OS=arduino BOARD=arduino_due_x_dbg TARGET_ARCH=arm SHIELD=BLE RELEASE=0 DEVICE_NAME=OIC
Specified Device name length MUST be less than 10 characters. RBL Library has this limitation.
By Default DEVICE_NAME=OIC-DEVICE, if device name option is not specified
To change the port number, please modify "port" variable in __upload() function in: "/build/arduino/SConscript".
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Folder structure:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
iotivity/
└── service
└── easy-setup/
│── SConscript
│── sdk
│ └── inc
│ └── src
│ └── android
│ └── arduino
│ └──wifi
│ └──inc
│ └──src
│── sampleapp
│ └──mediator/android
│ └──mediator/linux
│ └──enrollee/arduino
└── Build_Instructions_Android_Arduino.txt - You are reading this.
#******************************************************************
#
# Copyright 2014 Samsung Electronics All Rights Reserved.
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
##
# easy-setup project build script
##
import os
Import('env')
transport = env.get('TARGET_TRANSPORT')
env.AppendUnique(CPPDEFINES = ['EASY_SETUP_CA_INIT'])
easy_setup_env = env.Clone()
#
target_os = env.get('TARGET_OS')
lib_env = env.Clone()
if target_os == 'android':
SConscript(env.get('SRC_DIR') + '/service/third_party_libs.scons', exports = 'lib_env')
######################################################################
# Build flags
######################################################################
easy_setup_env.AppendUnique(CPPPATH = ['sdk/inc', 'sdk/src', 'sdk/common'])
if target_os not in ['windows', 'winrt']:
easy_setup_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall'])
if target_os not in ['android', 'arduino']:
easy_setup_env.AppendUnique(CXXFLAGS = ['-pthread'])
if target_os in ['android', 'linux']:
easy_setup_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
easy_setup_env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
easy_setup_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
if target_os not in ['linux', 'arduino']:
easy_setup_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'gnustl_shared'])
if not env.get('RELEASE'):
easy_setup_env.AppendUnique(LIBS = ['log'])
else:
easy_setup_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'pthread', 'connectivity_abstraction'])
if target_os == 'arduino':
easy_setup_env.AppendUnique(CPPPATH = [
'../../resource/oc_logger/include',
'../../resource/csdk/logger/include',
'../../resource/csdk/stack/include',
'../../extlibs/cjson',
'sdk/enrollee/arduino/wifi',
'sdk/enrollee/common/src',
'sdk/enrollee/common/inc'])
easy_setup_env.AppendUnique(CPPDEFINES = ['TB_LOG', 'ESWIFI'])
if target_os in ['android','linux']:
easy_setup_env.PrependUnique(CPPPATH = [
env.get('SRC_DIR') + '/resource/c_common/oic_malloc/include',
env.get('SRC_DIR') + '/resource/csdk/connectivity/common/inc',
env.get('SRC_DIR') + '/resource/csdk/connectivity/api',
env.get('SRC_DIR') + '/resource/csdk/stack/include',
env.get('SRC_DIR') + '/resource/csdk/logger/include',
env.get('SRC_DIR') + '/resource/csdk/security/include',
env.get('SRC_DIR') + '/extlibs/cjson',
'sdk/common',
'sdk/mediator/inc'])
######################################################################
# Source files and Targets
######################################################################
if target_os == 'arduino':
es_sdk_static = easy_setup_env.StaticLibrary('ESSDKLibrary',
['sdk/enrollee/common/src/easysetup.cpp',
'sdk/enrollee/common/src/resourceHandler.cpp',
'sdk/enrollee/arduino/wifi/networkHandler.cpp'])
easy_setup_env.InstallTarget(es_sdk_static, 'libESSDK')
if target_os == 'android':
es_sdk_shared = easy_setup_env.StaticLibrary('libESSDK',
['sdk/mediator/src/prov_adapter.cpp',
'sdk/mediator/src/wifi_provisioning.cpp',
'sdk/mediator/src/provisioning.cpp'])
easy_setup_env.InstallTarget(es_sdk_shared, 'libESSDK')
if target_os == 'linux':
es_sdk_shared = easy_setup_env.SharedLibrary('ESSDKLibrary',
['sdk/mediator/src/prov_adapter.cpp',
'sdk/mediator/src/wifi_provisioning.cpp',
'sdk/mediator/src/provisioning.cpp'])
easy_setup_env.InstallTarget(es_sdk_shared, 'libESSDK')
#Go to build sample apps
SConscript('sampleapp/SConscript')
#******************************************************************
#
# Copyright 2014 Samsung Electronics All Rights Reserved.
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
##
# sampleapp build script
##
Import('env')
# Add third party libraries
lib_env = env.Clone()
sample_env = lib_env.Clone()
target_os = env.get('TARGET_OS')
######################################################################
# Build flags
######################################################################
######################################################################
# Source files and Targets
######################################################################
if target_os == 'arduino' :
# Build linux sample app
SConscript('enrollee/arduino/SConscript')
if target_os == 'linux' :
# Build linux sample app
SConscript('mediator/linux/SConscript')
#******************************************************************
#
# Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Import('env')
enrollee_env = env.Clone()
transport = enrollee_env.get('TARGET_TRANSPORT')
######################################################################
# Build flags
######################################################################
enrollee_env.PrependUnique(CPPPATH = [
'../../../../../resource/oc_logger/include',
'../../../../../resource/csdk/logger/include',
'../../../../../resource/csdk/stack/include',
'../../../../../extlibs/cjson',
'../../../sdk/common',
'../../../sdk/enrollee/arduino/wifi',
'../../../sdk/enrollee/common/inc',
'../../../sdk/enrollee/common/src'
])
enrollee_env.AppendUnique(CPPDEFINES = ['TB_LOG', 'ESWIFI'])
enrollee_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
enrollee_env.PrependUnique(LIBS = ['octbstack','ocsrm','connectivity_abstraction','coap', 'ESSDKLibrary'])
enrollee = enrollee_env.Program('enrollee', 'enrollee_wifi.cpp')
env.CreateBin('enrollee')
i_enrollee = enrollee_env.Install(env.get('BUILD_DIR'), enrollee)
Alias('enrollee', i_enrollee)
env.AppendTarget('enrollee')
if(enrollee_env['UPLOAD'] == True):
from sys import platform as _platform
if _platform == "linux" or _platform == "linux2":
enrollee_env.Upload(env.get('BUILD_DIR') + '/service/easy-setup/sampleapp/enrollee/arduino/enrollee.hex')
else:
print 'Please use appropriate install method for your developing machine. Linux is the only supported platform right now.'
//******************************************************************
//
// Copyright 2014 Samsung Electronics All Rights Reserved.
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Do not remove the include below
#include "Arduino.h"
#include "logger.h"
#include <string.h>
#ifdef ARDUINOWIFI
// Arduino WiFi Shield
#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#else
// Arduino Ethernet Shield
#include <EthernetServer.h>
#include <Ethernet.h>
#include <Dns.h>
#include <EthernetClient.h>
#include <util.h>
#include <EthernetUdp.h>
#include <Dhcp.h>
#endif
#include "easysetup.h"
#define TAG "TS"
const char *getResult(OCStackResult result);
char ssid[] = "EasySetup123";
char passwd[] = "EasySetup123";
void EventCallbackInApp(ESResult eventFlag)
{
Serial.println("callback!!! in app");
}
// On Arduino Atmel boards with Harvard memory architecture, the stack grows
// downwards from the top and the heap grows upwards. This method will print
// the distance(in terms of bytes) between those two.
// See here for more details :
// http://www.atmel.com/webdoc/AVRLibcReferenceManual/malloc_1malloc_intro.html
void PrintArduinoMemoryStats()
{
#ifdef ARDUINO_AVR_MEGA2560
//This var is declared in avr-libc/stdlib/malloc.c
//It keeps the largest address not allocated for heap
extern char *__brkval;
//address of tmp gives us the current stack boundry
int tmp;
OC_LOG_V(INFO, TAG, "Stack: %u Heap: %u", (unsigned int)&tmp, (unsigned int)__brkval);
OC_LOG_V(INFO, TAG, "Unallocated Memory between heap and stack: %u",
((unsigned int)&tmp - (unsigned int)__brkval));
#endif
}
//The setup function is called once at startup of the sketch
void setup()
{
// Add your initialization code here
// Note : This will initialize Serial port on Arduino at 115200 bauds
OC_LOG_INIT();
OC_LOG(DEBUG, TAG, "OCServer is starting...");
if(InitEasySetup(ES_WIFI, ssid, passwd, EventCallbackInApp) == ES_ERROR)
{
OC_LOG(ERROR, TAG, "EasySetup Init Failed");
return;
}
if(InitProvisioning(EventCallbackInApp)== ES_ERROR)
{
OC_LOG(ERROR, TAG, "Init Provisioning Failed");
return;
}
}
// The loop function is called in an endless loop
void loop()
{
// This artificial delay is kept here to avoid endless spinning
// of Arduino microcontroller. Modify it as per specific application needs.
delay(2000);
// This call displays the amount of free SRAM available on Arduino
PrintArduinoMemoryStats();
// Give CPU cycles to OCStack to perform send/recv and other OCStack stuff
if (OCProcess() != OC_STACK_OK)
{
OC_LOG(ERROR, TAG, "OCStack process error");
return;
}
}
#built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Windows thumbnail db
Thumbs.db
# OSX files
.DS_Store
# Eclipse project files
.classpath
.project
#Android Studio & Gradle
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build/*
/base/build/*
/base/obj/*
/base/libs/*
/sample/*
#Some older projects
/*/out
/*/*/build
/*/*/production
*.iws
*.ipr
*~
*.swp
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="EasySetupGradle" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
<option name="BUILDABLE" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="EasySetup" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
<afterSyncTasks>
<task>generateDebugAndroidTestSources</task>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />