Merge pull request #313 from afischerdev/migrate-to-gradle

Migrate to gradle Part 2

This should run out of the box.
But for Android you need a file 'local.properties' which is exclude in .gitignore
See also new README

I've tested it on a Window10 system and an Ubuntu under Windows - w/o Android
This commit is contained in:
afischerdev 2021-06-29 13:19:43 +02:00 committed by GitHub
commit 1066700c01
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 334 additions and 225 deletions

View file

@ -46,21 +46,26 @@ A full documentation on how to set this up is available at
### Build and Install ### Build and Install
To compile BRouter (including the BRouter Android app), use To compile BRouter (including the BRouter Android app), add a file 'local.properties' to main folder with your Android path (Windows sample)
``` ```
mvn clean install -Dandroid.sdk.path=<your-sdk-path> sdk.dir=D\:\\Android\\android-sdk
```
and use
```
gradlew clean build
``` ```
If you only want to compile BRouter and the server part (skipping the Android If you only want to compile BRouter and the server part (skipping the Android
app), use app), use
``` ```
mvn clean install -pl '!brouter-routing-app' gradlew clean build -x :brouter-routing-app:build
``` ```
You can use `-Dmaven.javadoc.skip=true` to skip the JavaDoc processing and
`-DskipTests` to skip running the unitary tests.
### Get the required segments (data) files ### Get the required segments (data) files

View file

@ -4,4 +4,5 @@ plugins {
dependencies { dependencies {
implementation project(':brouter-util') implementation project(':brouter-util')
testImplementation 'junit:junit:4.13.1'
} }

View file

@ -8,5 +8,6 @@ dependencies {
implementation project(':brouter-util') implementation project(':brouter-util')
implementation project(':brouter-expressions') implementation project(':brouter-expressions')
implementation project(':brouter-codec') implementation project(':brouter-codec')
testImplementation 'junit:junit:4.13.1'
} }

View file

@ -711,6 +711,15 @@ public final class OsmTrack
public List<String> iternity; public List<String> iternity;
public void writeJson( String filename ) throws Exception
{
BufferedWriter bw = new BufferedWriter( new FileWriter( filename ) );
bw.write( formatAsGeoJson() );
bw.close();
}
public String formatAsGeoJson() public String formatAsGeoJson()
{ {
int turnInstructionMode = voiceHints != null ? voiceHints.turnInstructionMode : 0; int turnInstructionMode = voiceHints != null ? voiceHints.turnInstructionMode : 0;

View file

@ -5,4 +5,5 @@ plugins {
dependencies { dependencies {
implementation project(':brouter-util') implementation project(':brouter-util')
implementation project(':brouter-codec') implementation project(':brouter-codec')
testImplementation 'junit:junit:4.13.1'
} }

View file

@ -14,7 +14,7 @@ public class EncodeDecodeTest
{ {
URL testpurl = this.getClass().getResource( "/dummy.txt" ); URL testpurl = this.getClass().getResource( "/dummy.txt" );
File workingDir = new File(testpurl.getFile()).getParentFile(); File workingDir = new File(testpurl.getFile()).getParentFile();
File profileDir = new File( workingDir, "/../../../misc/profiles2" ); File profileDir = new File( workingDir, "/../../../../misc/profiles2" );
File lookupFile = new File( profileDir, "lookups.dat" ); File lookupFile = new File( profileDir, "lookups.dat" );
// read lookup.dat + trekking.brf // read lookup.dat + trekking.brf

View file

@ -2,15 +2,25 @@ plugins {
id 'application' id 'application'
} }
version = '1.6.1'
application { application {
// Gradles 'application' plugin requires one main class; since we have multiple ones, just specify // Gradles 'application' plugin requires one main class; since we have multiple ones, just specify
// one of them, since the applications won't be run from gradle anyways. // one of them, since the applications won't be run from gradle anyways.
mainClassName = 'btools.mapcreator.PosUnifier' mainClass.set('btools.mapcreator.PosUnifier')
jar {
manifest {
attributes "Main-Class": getMainClass()
}
}
} }
dependencies { dependencies {
implementation project(':brouter-util')
implementation project(':brouter-codec') implementation project(':brouter-codec')
implementation project(':brouter-util')
implementation project(':brouter-expressions') implementation project(':brouter-expressions')
implementation('junit:junit:4.13')
testImplementation('junit:junit:4.13.1')
} }

View file

@ -17,7 +17,7 @@ public class MapcreatorTest
Assert.assertTrue( "test-osm-map dreieich.osm not found", mapurl != null ); Assert.assertTrue( "test-osm-map dreieich.osm not found", mapurl != null );
File mapFile = new File(mapurl.getFile()); File mapFile = new File(mapurl.getFile());
File workingDir = mapFile.getParentFile(); File workingDir = mapFile.getParentFile();
File profileDir = new File( workingDir, "/../../../misc/profiles2" ); File profileDir = new File( workingDir, "/../../../../misc/profiles2" );
File tmpdir = new File( workingDir, "tmp" ); File tmpdir = new File( workingDir, "tmp" );
tmpdir.mkdir(); tmpdir.mkdir();

View file

@ -3,7 +3,6 @@ plugins {
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':brouter-util') implementation project(':brouter-util')
implementation project(':brouter-codec') implementation project(':brouter-codec')
implementation project(':brouter-expressions') implementation project(':brouter-expressions')

View file

@ -3,32 +3,78 @@ plugins {
} }
android { android {
compileSdkVersion 29 compileSdkVersion 30
defaultConfig { defaultConfig {
applicationId "btools.routingapp" applicationId "btools.routingapp"
minSdkVersion 10 minSdkVersion 19
targetSdkVersion 29 targetSdkVersion 30
versionCode 41 versionCode 41
versionName "1.6.1" versionName "1.6.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" setProperty("archivesBaseName","BRouterApp." + defaultConfig.versionName)
//testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
if(project.hasProperty("RELEASE_STORE_FILE")) {
signingConfigs {
// this uses a file ~/.gradle/gradle.properties
// with content:
// RELEASE_STORE_FILE={path to your keystore}
// RELEASE_STORE_PASSWORD=*****
// RELEASE_KEY_ALIAS=*****
// RELEASE_KEY_PASSWORD=*****
//
release {
// enable signingConfig in buildTypes to get a signed apk file
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
// Optional, specify signing versions used
v1SigningEnabled true
v2SigningEnabled true
}
}
} }
buildTypes { buildTypes {
release { release {
minifyEnabled false minifyEnabled false
debuggable false
if(project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig signingConfigs.release
}
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
} }
debug {
minifyEnabled false
debuggable true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
lintOptions {
disable 'InvalidPackage'
checkReleaseBuilds false //added this line to the build.gradle under the /android/app/build.gradle
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
} }
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation project(':brouter-mapaccess') implementation project(':brouter-mapaccess')
implementation project(':brouter-core') implementation project(':brouter-core')
implementation project(':brouter-expressions') implementation project(':brouter-expressions')
implementation project(':brouter-util') implementation project(':brouter-util')
} }

View file

@ -5,7 +5,9 @@ import java.io.BufferedWriter;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.StringTokenizer;
import android.os.Bundle; import android.os.Bundle;
import btools.router.OsmNodeNamed; import btools.router.OsmNodeNamed;
@ -16,6 +18,10 @@ import btools.router.RoutingEngine;
public class BRouterWorker public class BRouterWorker
{ {
private static final int OUTPUT_FORMAT_GPX = 0;
private static final int OUTPUT_FORMAT_KML = 1;
private static final int OUTPUT_FORMAT_JSON = 2;
public String baseDir; public String baseDir;
public String segmentDir; public String segmentDir;
public String profileName; public String profileName;
@ -65,6 +71,22 @@ public class BRouterWorker
{ {
rc.startDirection = Integer.valueOf( params.getInt( "direction" ) ); rc.startDirection = Integer.valueOf( params.getInt( "direction" ) );
} }
if (params.containsKey( "extraParams" )) { // add user params
String extraParams = params.getString("extraParams");
if (rc.keyValues == null) rc.keyValues = new HashMap<String,String>();
StringTokenizer tk = new StringTokenizer( extraParams, "?&" );
while( tk.hasMoreTokens() ) {
String t = tk.nextToken();
StringTokenizer tk2 = new StringTokenizer( t, "=" );
if ( tk2.hasMoreTokens() ) {
String key = tk2.nextToken();
if ( tk2.hasMoreTokens() ) {
String value = tk2.nextToken();
rc.keyValues.put( key, value );
}
}
}
}
readNogos( params ); // add interface provided nogos readNogos( params ); // add interface provided nogos
RoutingContext.prepareNogoPoints( nogoList ); RoutingContext.prepareNogoPoints( nogoList );
@ -99,20 +121,33 @@ public class BRouterWorker
} }
String format = params.getString("trackFormat"); String format = params.getString("trackFormat");
boolean writeKml = format != null && "kml".equals( format ); int writeFromat = OUTPUT_FORMAT_GPX;
if (format != null) {
if ("kml".equals(format)) writeFromat = OUTPUT_FORMAT_KML;
if ("json".equals(format)) writeFromat = OUTPUT_FORMAT_JSON;
}
OsmTrack track = cr.getFoundTrack(); OsmTrack track = cr.getFoundTrack();
if ( track != null ) if ( track != null )
{ {
if ( pathToFileResult == null ) if ( pathToFileResult == null )
{ {
if ( writeKml ) return track.formatAsKml(); switch ( writeFromat ) {
return track.formatAsGpx(); case OUTPUT_FORMAT_GPX: return track.formatAsGpx();
case OUTPUT_FORMAT_KML: return track.formatAsKml();
case OUTPUT_FORMAT_JSON: return track.formatAsGeoJson();
default: return track.formatAsGpx();
}
} }
try try
{ {
if ( writeKml ) track.writeKml(pathToFileResult); switch ( writeFromat ) {
else track.writeGpx(pathToFileResult); case OUTPUT_FORMAT_GPX: track.writeGpx(pathToFileResult); break;
case OUTPUT_FORMAT_KML: track.writeKml(pathToFileResult); break;
case OUTPUT_FORMAT_JSON: track.writeJson(pathToFileResult); break;
default: track.writeGpx(pathToFileResult); break;
}
} }
catch( Exception e ) catch( Exception e )
{ {

View file

@ -2,19 +2,23 @@ plugins {
id 'application' id 'application'
} }
version = '1.6.1'
application { application {
mainClassName = 'btools.server.BRouter' mainClass.set('btools.server.BRouter')
jar { jar {
manifest { manifest {
attributes "Main-Class": "$mainClassName" attributes "Main-Class": getMainClass()
} }
} }
} }
dependencies { dependencies {
implementation('junit:junit:4.13') testImplementation 'junit:junit:4.13.1'
implementation project(':brouter-util') implementation project(':brouter-util')
implementation project(':brouter-core') implementation project(':brouter-core')
implementation project(':brouter-mapaccess') implementation project(':brouter-mapaccess')
} }

View file

@ -20,7 +20,7 @@ public class IntegrityCheckTest
File resultfile = new File( resulturl.getFile() ); File resultfile = new File( resulturl.getFile() );
workingDir = resultfile.getParentFile(); workingDir = resultfile.getParentFile();
File segmentDir = new File( workingDir, "/../../../brouter-map-creator/target/test-classes/tmp/segments" ); File segmentDir = new File( workingDir, "/../../../../brouter-map-creator/build/resources/test/tmp/segments" );
File[] files = segmentDir.listFiles(); File[] files = segmentDir.listFiles();
for ( File f : files ) for ( File f : files )

View file

@ -61,13 +61,13 @@ public class RouterTest
wplist.add( n ); wplist.add( n );
RoutingContext rctx = new RoutingContext(); RoutingContext rctx = new RoutingContext();
rctx.localFunction = wd + "/../../../misc/profiles2/trekking.brf"; rctx.localFunction = wd + "/../../../../misc/profiles2/trekking.brf";
// c.setAlternativeIdx( 1 ); // c.setAlternativeIdx( 1 );
RoutingEngine re = new RoutingEngine( RoutingEngine re = new RoutingEngine(
wd + "/" + trackname, wd + "/" + trackname,
wd + "/" + trackname, wd + "/" + trackname,
wd + "/../../../brouter-map-creator/target/test-classes/tmp/segments", wplist, rctx ); wd + "/../../../../brouter-map-creator/build/resources/test/tmp/segments", wplist, rctx );
re.doRun( 0 ); re.doRun( 0 );
return re.getErrorMessage(); return re.getErrorMessage();

View file

@ -3,5 +3,5 @@ plugins {
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation('junit:junit:4.13.1')
} }

View file

@ -3,12 +3,11 @@
buildscript { buildscript {
repositories { repositories {
mavenCentral()
google() google()
jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.6.3' classpath 'com.android.tools.build:gradle:4.1.3'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
@ -18,9 +17,8 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
mavenCentral()
google() google()
jcenter()
} }
} }

View file

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-all.zip