Release of Android platform development (Java API)


Are there instructions on how to use a native Java library, rather than the one including the Android dependencies?

From looking at the code in under api, it isn’t obvious that there are any Android libraries needed. However, when I try to build the library, it is asking me for Android SDK, agreed Android licenses and so forth.

Ideally, I’d like to be able to use JitPack to just build a jar that I can use in my Java project, until there is any formal Maven Central package that I can include.

I understand that Android may be the destination, but core Java support should be on-route. Has anyone been experimenting with this?


You can build just the native Java lib from the command line like:

gradlew :safe-app:download-nativelibs
gradlew :safe-app:build

The api and lib jars will be created in safe_app_java/api/build/libs and safe_app_java/lib/build/libs.
The shared native libs will be in safe_app_java/safe-app/.tempDownloads.


Thanks, @ogrebgr - that is exactly what I needed! Are these things obvious from the build.gradle or some such? I’ve not really used gradle much in anger.


More or less… I just had the experience from previous versions and the experiments with them.


@Traktion @ogrebgr I’ve created a new topic with some desktop specific instructions and an example too :slight_smile:


Hi all,

It’s been a little quiet on here for a little bit…

  • Is anyone struggling and need any help?
  • Is anyone working on something that they’d like to talk about?
  • Is anyone looking for some feedback on their DApp idea/concept/prototype?



I am working on proof-of-concept mail/chat app. Currently at the stage of creating simpler API around NativeBindings. Will need few more weekends until having something to show…


nice… I look forward to seeing it when you are comfortable with it :smile:!


Hi all - just working my way through the tutorial app. I keep getting stuck here. I’m guessing that when I was asked to include dependencies (alt-enter followed by a choice of two options) I picked the wrong one. I can’t see an obvious way back though. Bearing in mind that I haven’t the first clue what I’m doing, what’s the next step?


You probably autoimported ContainerPermissions from safe_authenticator, not the regular. Go on top of the file, find import net.maidsafe.safe_authenticator.ContainerPermissions;, remove it, and then import the regular (i.e. the one without safe_authenticator in its name).


Thanks @ogrebgr - got me onto the next stage at least. I’m now stuck here - lots of symbols can’t be resolved. I notice the connect() method takes different arguments in template from @lionel.faber’s video (8:30, lower image) so presumably it’s been updated. Could that be the issue? I’ve tried clearing the cache and restarting - no joy.
Thanks for any help.


Open build.gradle (app). There is:
mockImplementation ‘net.maidsafe:safe-app-android-dev:0.1.0-SNAPSHOT’
nonMockImplementation ‘net.maidsafe:safe-app-android:0.1.0-SNAPSHOT’

Hit Alt-Enter on each to be changed to latest version, sync and errors should be gone.


I can’t find any mention of those items.

Here is

buildscript {
    repositories {
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha09"
apply plugin: ''
apply plugin: 'androidx.navigation.safeargs'
apply plugin: 'checkstyle'
apply plugin: 'pmd'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "net.maidsafe.sample"
        minSdkVersion 24
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner ""
        multiDexEnabled true
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), ''
    flavorDimensions "app"
    productFlavors {
        mock {
            dimension "app"
        nonMock {
            dimension "app"
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8

dependencies {
    implementation fileTree(include: ['*.aar'], dir: 'libs')
    implementation ''
    mockImplementation 'net.maidsafe:safe-app-android-dev:0.1.0'
    nonMockImplementation 'net.maidsafe:safe-app-android:0.1.0'
    implementation ""
    implementation ""
    implementation ""
    implementation ""
    implementation ""
    implementation ''
    implementation ""
    testImplementation 'junit:junit:4.12'
    androidTestImplementation ''
    androidTestImplementation ''
    def nav_version = "1.0.0-alpha09"
    implementation "android.arch.navigation:navigation-fragment:$nav_version"
    implementation "android.arch.navigation:navigation-ui:$nav_version"
    def lifecycle_version = "1.1.1"
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
task checkstyle(type: Checkstyle) {
    configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml")
    source 'src'
    include '**/*.java'
    exclude '**/gen/**'
    classpath = files()
task pmd(type: Pmd) {
    ruleSetFiles = files("${project.rootDir}/config/pmd/pmd-ruleset.xml")
    source 'src'
    include '**/*.java'
    exclude '**/gen/**'
    exclude '**/'
    reports {
        xml.enabled = false
        html.enabled = true



It seems that you are missing:

repositories {
    maven {
        url ""

from dependencies, i.e. add in before mockImplementation 'net.maidsafe:safe-app-android-dev:0.1.0'


Hey @JPL. Looks like you’re updating the connect function in the SafeTodoService class. The code from the tutorial should go into the SafeApi class’ connect function.

Thanks for jumping in and helping @ogrebgr :slight_smile:

With regard to the dependencies, the SNAPSHOT libraries will contain the latest version of the code from the master branch. This is a pre-release that devs can try out before an official release of a new version on jcenter. So for example, if you raise a PR ( :wink: :wink: ) with a bug-fix / improvement that gets merged into the repo’s master branch, an updated version of the library will be available on the OSS-SNAPSHOT-LOCAL repository as safe-app-android:0.2.0-SNAPSHOT so that other devs can start trying it out before the official release on jcenter.

In @JPL’s case the dependencies are specified without the -SNAPSHOT prefix so the additional repo link will not be required.


OK, getting there. One step at a time … Pretty sure I’ve updated the right class this time (doh), but I’m getting the ‘cannot resolve symbol’ error again.


You’ll have to import the packages in this class too. An easy way is to add

import net.maidsafe.safe_app.*

along with the other imports :slight_smile:


Yes that fixed it thanks! Apologies for the constant questions. I haven’t used Android Studio before and it’s a bit of a maze.


OK, a fun build error to finish off :slightly_smiling_face: . The files all seem to be there. Any idea why it can’t install them? This is on clicking “Run”.

$ adb install-multiple -r -t /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_7.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_1.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_2.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_0.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/dep/dependencies.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_4.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_3.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/resources/instant-run/mock/debug/resources-mock-debug.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_5.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_6.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_9.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/split-apk/mock/debug/slices/slice_8.apk /media/user/KingstonSSD/safe-getting-started-android/app/build/intermediates/instant-run-apk/mock/debug/app-mock-debug.apk 
Error while Installing APKs


My first guess is that you’re using an x86 emulator. The safe-app-android package will only support devices with x86_64 and armeabi-v7a.

When creating an emulator, please make sure that you choose a system image with x86_64 ABI.