Android library project for providing multiple image selection from the device.

Related tags

SDK poly-picker
Overview

PolyPicker

Android library project for selecting/capturing multiple images from the device.

Result

Caution!

Eclipse library project structure has been dropped. If you wish to use this library in your eclipse IDE, please checkout eclipse-develop. No further development will be done or merged into eclipse-develop branch.

Why?

  • Most of the apps we develop require fetching images from camera or gallery.
  • Android does not provide multi-selection of images out of the box until API 18.
  • Dealing with camera on variety of hardware and fragmentation in underlying software is difficult.
  • There are no libraries that help me multi-choose images from both camera and gallery with beautiful UX.

Features

  • Allows taking pictures from camera as well.
  • Multi-selection of images from gallery.
  • Ability to select/capture images upto a specified limit.
  • Preview thumbnails of selected images.

Download

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // and
    // your
    // other
    // dependencies...
}

// add external respository url in addition to having
// your preferred repository.
repositories {
    // for downloading polypicker dependency cwac-camera
    maven {
        url "https://repo.commonsware.com.s3.amazonaws.com"
    }

    // for downloading poly-picker now we are using jitpack.
    // Goodbye Maven Central
    maven {
        url "https://jitpack.io"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // your dependencies
    compile 'com.github.jaydeepw:poly-picker:1.0.23'
}

Requires Android 4.0+.

Getting started

Add camera permissions and required features to your AndroidManifest.xml

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Request large heap memory using "largeHeap" attribute for your application. This will avoid application to crash on low memory devices. The side effect would be that your application may force other applications to be kicked out of memory. Nothing very severe.

<application
		android:icon="@drawable/ic_launcher"
		android:label="@string/app_name"
		android:largeHeap="true">
		.
		.
</application>

Declare the PolyPicker activity in your AndroidManifest.xml with some theme that is a descendent of AppCompat.

<activity
            android:name="nl.changer.polypicker.ImagePickerActivity" />

Start the PolyPicker activity and get the result back.

private void getImages() {
	    Intent intent = new Intent(mContext, ImagePickerActivity.class);
        Config config = new Config.Builder()
                .setTabBackgroundColor(R.color.white)    // set tab background color. Default white.
                .setTabSelectionIndicatorColor(R.color.blue)
                .setCameraButtonColor(R.color.green)
                .setSelectionLimit(2)    // set photo selection limit. Default unlimited selection.
                .build();
        ImagePickerActivity.setConfig(config);
        startActivityForResult(intent, INTENT_REQUEST_GET_IMAGES);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
	super.onActivityResult(requestCode, resultCode, intent);

	if (resultCode == Activity.RESULT_OK) {
		if (requestCode == INTENT_REQUEST_GET_IMAGES) {
			Parcelable[] parcelableUris = intent.getParcelableArrayExtra(ImagePickerActivity.EXTRA_IMAGE_URIS);

            if (parcelableUris == null) {
                return;
            }

            // Java doesn't allow array casting, this is a little hack
            Uri[] uris = new Uri[parcelableUris.length];
            System.arraycopy(parcelableUris, 0, uris, 0, parcelableUris.length);

            if (uris != null) {
                for (Uri uri : uris) {
                    Log.i(TAG, " uri: " + uri);
                    mMedia.add(uri);
                }

                showMedia();
            }
		}
	}
}

Testing Snapshot build

Snapshot builds are development builds that need refining and bug fixes. Open source community can greatly help in achieveing this by testing such builds and logging issues and feedback that can make PolyPicker better, together. Add snapshot dependency to your app module's build.gradle file

repositories {
    // for downloading Polypicker dependency cwac-camera
    maven {
        url "https://repo.commonsware.com.s3.amazonaws.com"
    }

    // for downloading polypicker v1.0.13-SNAPSHOT
    maven {
        url "https://oss.sonatype.org/content/repositories/snapshots/"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.+'
    // and other dependencies

    // PolyPicker dependency.
    compile 'net.the4thdimension:poly-picker:1.0.13-SNAPSHOT'
}

Add camera permissions and required features to your AndroidManifest.xml

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Request large heap memory using "largeHeap" attribute for your application. This will avoid application to crash on low memory devices. The side effect would be that your application may force other applications to be kicked out of memory. Nothing very severe.

<application
		android:icon="@drawable/ic_launcher"
		android:label="@string/app_name"
		android:largeHeap="true">
		.
		.
</application>

Declare the PolyPicker activity in your AndroidManifest.xml

<activity
            android:name="nl.changer.polypicker.ImagePickerActivity" />

Start PolyPicker activity to request images.

// start polypicker activity to grab some images.
Intent intent = new Intent(mContext, ImagePickerActivity.class);
        Config config = new Config.Builder()
                .setTabBackgroundColor(R.color.white)    // set tab background color. Default white.
                .setTabSelectionIndicatorColor(R.color.blue)
                .setCameraButtonColor(R.color.green)
                .setSelectionLimit(2)    // set photo selection limit. Default unlimited selection.
                .build();
        ImagePickerActivity.setConfig(config);
        startActivityForResult(intent, INTENT_REQUEST_GET_IMAGES);


// parse images returned by polypicker
@Override
protected void onActivityResult(int requestCode, int resuleCode, Intent intent) {
	super.onActivityResult(requestCode, resuleCode, intent);

	if (resuleCode == Activity.RESULT_OK) {
		if (requestCode == INTENT_REQUEST_GET_IMAGES) {
			Parcelable[] parcelableUris = intent.getParcelableArrayExtra(ImagePickerActivity.EXTRA_IMAGE_URIS);

            if (parcelableUris == null) {
                return;
            }

            // Java doesn't allow array casting, this is a little hack
            Uri[] uris = new Uri[parcelableUris.length];
            System.arraycopy(parcelableUris, 0, uris, 0, parcelableUris.length);

            if (uris != null) {
                for (Uri uri : uris) {
                    Log.i(TAG, " uri: " + uri);
                    mMedia.add(uri);
                }

                showMedia();
            }
		}
	}
}

Contributing

Please fork this repository and contribute back using pull requests.

Please follow Android code style guide

You can contribute to polypicker in following ways

  • Test on multiple devices you have
  • Write unit tests
  • Write UI tests
  • Help with string translations
  • Fix open issues in the library

Developed by

Credits

  • This project is inspired by and modified from an existing project mentioned below. android-multiple-image-picker

  • Dealing with camera on variety of hardware and fragmentation in underlying software is difficult. CommonsGuy's library Cwac Camera helped handle it better in this project

Donations!

  • Using Bitcoins: If this project has helped you understand issues, be productive by using this library in your app or just being nice with me, you can always donate me Bitcoins at this address 3QJEmgqXsT1CFLtURYWxzmww59DdKYVwNk

  • Using Paypal: Pay Jay

Alternative projects

Release Notes

1.0.23

v1.0.22

  • Add Danish translations

v1.0.17

  • Add Japanese and Portuguese(Brazil) translations

v1.0.14

  • Add autofocus feature when taking picture using camera.
  • Material theme for camera fragment
  • Configurable UI controls to match the theme of the host application using the library.

v1.0.11

  • Fix leaking progress dialog window when the device orientation changes

v1.0.10

  • Persist captured images even on device orientation changes

v1.0.9

  • Replace camera view with CommonsGuy camera view which is tested well and handles camera functionality better on variety of hardware.
Comments
  • Error:Failed to resolve: com.commonsware.cwac:camera:0.6.10

    Error:Failed to resolve: com.commonsware.cwac:camera:0.6.10

    First of all I really liked your library. But when I try to compile, I'm getting above error. Please help on this. My specs: Compile SDK: API22 Min SDK: API16 Target SDK: API22

    opened by pasaneramusugoda 17
  • Some mobile phone have a exception when take a picture。

    Some mobile phone have a exception when take a picture。

    Some mobile phone have a exception when take a picture。 java.lang.IllegalStateException: Unable to create new file: /storage/sdcard0/DCIM/Camera/1418805137509.jpg

    cause this code :String path = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), bitmap, getPhotoFilename(), null);

    I think this exception maybe with some mobile phone sdcard path diffenrent

    could you help me to solve this question, thanks a lot.

    bug 
    opened by HarlonWang 12
  • Android Studio  can't import this lib

    Android Studio can't import this lib

    Hi, I really like your great job of this lib , when I try to import the lib to Android Studio(0.8.11) which does show import successfully, but I can't access ImagePickerActivity in code anyway. Then I try to import aar file directly, it does not work ,too. Any hint on that?

    Thanks.

    opened by whynogo 11
  • How to change language/texts

    How to change language/texts

    Very nice library, heres how to change texts (usefull for changing language):

    public class MyImagePickerActivity extends ImagePickerActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
    
    
        getActionBar().getTabAt(0).setText("Camera");
        getActionBar().getTabAt(1).setText("Gallery");
    
        ((Button)findViewById(R.id.action_btn_cancel)).setText("Cancel");
        ((Button)findViewById(R.id.action_btn_done)).setText("Done");
        ((TextView)findViewById(R.id.selected_photos_empty)).setText("No image selected");
    
      }
    }
    

    By the way, can you declare all ImagePickerActivity fields protected? Whis way we can extend it and change for our needs.

    opened by sagits 9
  • Crash when taking hi-res photos

    Crash when taking hi-res photos

    Steps to reproduce

    1. Use a device with a hi-res camera, like the Samsung Galaxy S5 which has a 16MP camera.
    2. Start the demo.
    3. Take a photo.

    Actual result

    1. The demo crashes.

    Expected result

    1. The photo is saved.

    Notes Lib version: 1.0.11.

    For some reason the demo app does not always capture images in high resolution.

    Stacktrace of crash

    java.lang.NullPointerException: uriString
        at android.net.Uri$StringUri.<init>(Uri.java:467)
        at android.net.Uri$StringUri.<init>(Uri.java:457)
        at android.net.Uri.parse(Uri.java:429)
        at nl.changer.polypicker.CwacCameraFragment$DemoCameraHost.saveImage(CwacCameraFragment.java:138)
        at com.commonsware.cwac.camera.ImageCleanupTask.run(ImageCleanupTask.java:133)
    

    Looking at the CwacCameraFragment class' saveImage() method, I do see that there is no null checking for the result of calling MediaStore.Images.Media.insertImage(...). According to the [Android docs](https://developer.android.com/reference/android/provider/MediaStore.Images.Media.html#insertImage%28android.content.ContentResolver, android.graphics.Bitmap, java.lang.String, java.lang.String%29) this method could return null.

    The URL to the newly created image, or null if the image failed to be stored for any reason.

    opened by wjwarren 8
  • ImagePickerActivity throws NullPointerException

    ImagePickerActivity throws NullPointerException

    My code: Intent intent = new Intent(view.getContext(), ImagePickerActivity.class); intent.putExtra(ImagePickerActivity.EXTRA_SELECTION_LIMIT, 9); startActivityForResult(intent, INTENT_REQUEST_GET_IMAGES);

    exception thrown: Caused by: java.lang.NullPointerException at nl.changer.polypicker.ImagePickerActivity.setupActionBar(ImagePickerActivity.java:104) at nl.changer.polypicker.ImagePickerActivity.onCreate(ImagePickerActivity.java:83) at android.app.Activity.performCreate(Activity.java:5020) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)             at android.app.ActivityThread.access$600(ActivityThread.java:149)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)             at android.os.Handler.dispatchMessage(Handler.java:99)

    Any help? Thanks.

    opened by fotock 6
  • Changes in ImagePickerActivity.java, now user can set flag for showing only camera or gallery

    Changes in ImagePickerActivity.java, now user can set flag for showing only camera or gallery

    Minor Changes in ImagePickerActivity.java Now user can set flag for showing only camera or gallery. To set this flag user need to, Add this with value true/false as an extended data to the intent while starting as activity. For e.g. Intent intent = new Intent(mContext, ImagePickerActivity.class); intent.putExtra(ImagePickerActivity.EXTRA_SELECTION_LIMIT, 3); intent.putExtra(ImagePickerActivity.EXTRA_SHOW_ONLY_CAMERA, true); // intent.putExtra(ImagePickerActivity.EXTRA_SHOW_ONLY_GALLERY, false); startActivityForResult(intent, INTENT_REQUEST_GET_N_IMAGES);

    EXTRA_SHOW_ONLY_CAMERA && EXTRA_SHOW_ONLY_GALLERY By default both options will be displayed, Set any of the above flag to true to show only camera or only gallery If user sets both to true, both options will be displayed.

    opened by niketkadde 4
  • resolved crash issue on rotating device in CwacCameraFragment.java Progr...

    resolved crash issue on rotating device in CwacCameraFragment.java Progr...

    Hi Jay, I have resolved one crash issue in poly-picker library. Issue was:Take a photo, while it says processing... rotate the screen. Repeat it for multiple times quickly and it crashes. I have explained, what was the error and how to resolve that in CwacCameraFragment.java file. Please merge this ASAP and release new build on Maven repo, so that I can release my app on Google Play.

    opened by niketkadde 4
  • Crashes in samsung device

    Crashes in samsung device

    I made a workaround which helps to avoid crash in samsung devices while using camera with flash . its just crack work around . But it helped me to continue these lib with my application . WORK AROUND SUMMARY : it ill avoid flash while taking photos with samsung device in low light which helps to avoid almost 99% of issue with samsung device . i know its not a big solution but helpful i think

    opened by Nikhil-z 3
  • Use this library with Fragments

    Use this library with Fragments

    Hello, I want to use this library but I'm new to Android programming so I didn't understand well how to use it with fragments. I am developing an app that for now has only one activity (Navigation Drawer) and fragments (other pages). I tried to integrate this library, trying to understand the code from the PolyPickerDemo in this repository, but when I click on the button Pick image it crashes.

    Can someone help me with an example? If someone want to help me I will post the code of the fragment I made.

    opened by cbranca 3
  • Can't build - possible dependency conflict?

    Can't build - possible dependency conflict?

    Hi, sorry for the lenghty issue report. I am unable to build. The main error is Process 'command '/Users/fabiotiriticco/Library/Android/sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1. Full exception after running ./gradlew assemble --stacktrace --info is:

    * Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugResources'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
    Caused by: org.gradle.internal.UncheckedException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Users/fabiotiriticco/Library/Android/sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1
        at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:39)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:66)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:235)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:222)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 47 more
    Caused by: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Users/fabiotiriticco/Library/Android/sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1
        at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:42)
        at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:780)
        at com.android.builder.core.AndroidBuilder$processResources$1.call(Unknown Source)
        at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.groovy:145)
        at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.groovy:64)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        ... 53 more
    Caused by: org.gradle.process.internal.ExecException: Process 'command '/Users/fabiotiriticco/Library/Android/sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1
        at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:365)
        at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:40)
        ... 58 more
    

    Any idea where that might be coming from? Here's my build.gradle file:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 22
        buildToolsVersion "22.0.1"
    
        defaultConfig {
            applicationId ...
            minSdkVersion 17
            targetSdkVersion 22
            versionCode 3
            versionName "0.1.1"
    
            multiDexEnabled true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            debug {
                debuggable true
            }
        }
    
        // exclude stuff from final build
        packagingOptions {
            exclude 'LICENSE.txt'
            exclude 'META-INF/services/javax.annotation.processing.Processor'
        }
    
        lintOptions {
            disable 'InvalidPackage'
        }
    }
    
    repositories {
        // maven central repository
        mavenCentral()
    
        // repository for crop image
        maven { url 'http://lorenzo.villani.me/android-cropimage/' }
    
        // repository for persistent search bar
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    
        // repository for multiple image pick
        maven { url "https://repo.commonsware.com.s3.amazonaws.com" }
    
    }
    
    dependencies {
        // include local jars (if any)
        compile fileTree(dir: 'libs', include: ['*.jar'])
    
        // android stuff
        compile 'com.google.android.gms:play-services:7.3.0'
        compile 'com.android.support:appcompat-v7:22.1.1'
        compile 'com.android.support:cardview-v7:21.0.3'
    
        // unit tests
        androidTestCompile 'junit:junit:4.12'
    
        // dagger for dependency injection.
        // http://square.github.io/dagger/
        // 'provided' means that we don't ship it with the APK.
        // This is because we only need the dagger-compiler at compile time.
        compile 'com.squareup.dagger:dagger:1.2.2'
        provided 'com.squareup.dagger:dagger-compiler:1.2.2'
    
        // retrofit for API interface
        // http://square.github.io/retrofit/
        compile 'com.squareup.retrofit:retrofit:1.9.0'
    
        // okHttp for HTTP requests
        // http://square.github.io/okhttp/
        compile 'com.squareup.okhttp:okhttp:2.3.0'
        compile 'com.squareup.okhttp:okhttp-urlconnection:2.3.0'
    
        // picasso for asynchronous image loading & caching
        // http://square.github.io/picasso/
        compile 'com.squareup.picasso:picasso:2.5.2'
    
        // Otto for event publishing bus
        // http://square.github.io/otto/
        compile 'com.squareup:otto:1.3.6'
    
        // JodaTime for Android
        // https://github.com/dlew/joda-time-android
        compile 'net.danlew:android.joda:2.7.1'
    
        // facebook SDK for Android
        compile 'com.facebook.android:facebook-android-sdk:3.22.0'
    
        // floating action button
        // https://github.com/futuresimple/android-floating-action-button
        compile 'com.getbase:floatingactionbutton:1.9.0'
    
        // butter knife for views injection
        // http://goo.gl/2HBGLT
        compile 'com.jakewharton:butterknife:6.1.0'
    
        // super recycler view
        // https://github.com/Malinskiy/SuperRecyclerView
        compile 'com.malinskiy:superrecyclerview:1.1.0'
    
        // websocket library
        // https://github.com/TooTallNate/Java-WebSocket
        compile "org.java-websocket:Java-WebSocket:1.3.0"
    
        // snackbar for actions
        // https://github.com/nispok/snackbar
        compile 'com.nispok:snackbar:2.10.7'
    
        // crop image
        // see added repository on top
        // https://github.com/lvillani/android-cropimage
        compile 'me.villani.lorenzo.android:android-cropimage:1.1.0'
    
        // circular image view for profile pictures
        // https://github.com/hdodenhof/CircleImageView
        compile 'de.hdodenhof:circleimageview:1.3.0'
    
        // better date picker for birth date
        // https://github.com/derekbrameyer/android-betterpickers
        compile 'com.doomonafireball.betterpickers:library:1.5.5'
    
        // material progress bar
        // https://github.com/lsjwzh/MaterialLoadingProgressBar
        compile('com.lsjwzh:materialloadingprogressbar:0.5.5-RELEASE')
    
        // persistent search bar
        // https://github.com/Quinny898/PersistentSearch
        compile 'com.quinny898.library.persistentsearch:library:1.0.0-SNAPSHOT'
    
        // material calendar
        // https://github.com/prolificinteractive/material-calendarview
        compile 'com.prolificinteractive:material-calendarview:0.3.2'
    
        // time picker
        // https://github.com/erz05/TimePicker
        compile 'com.github.erz05:TimePicker:0.1.2@aar'
    
        // multiple image pick
        // https://github.com/jaydeepw/poly-picker
        compile 'net.the4thdimension:poly-picker:1.0.11'
    }
    

    I would really like to be able to build and try out this library. Thanks for any help and sorry for the lenghty issue report. Fabio

    opened by ticofab 3
  • AAPT2 error: check logs for details

    AAPT2 error: check logs for details

    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugResources'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:59) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:128) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:46) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30) at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:314) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:204) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:134) at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:109) at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78) at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75) at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152) at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100) at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75) at org.gradle.tooling.internal.provider.runner.ClientProvidedBuildActionRunner.run(ClientProvidedBuildActionRunner.java:62) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40) at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30) at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39) at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25) at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80) at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53) at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:57) at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32) at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36) at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25) at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43) at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:69) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:30) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:45) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72) at org.gradle.util.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:745) Caused by: org.gradle.tooling.BuildException: Failed to process resources, see aapt output above for details. at com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.invokeAaptForSplit(LinkApplicationAndroidResourcesTask.java:512) at com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.doFullTaskAction(LinkApplicationAndroidResourcesTask.java:249) at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106) at sun.reflect.GeneratedMethodAccessor421.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) ... 107 more Suppressed: java.lang.RuntimeException: Some file processing failed, see logs for details at com.android.builder.internal.aapt.QueuedResourceProcessor.waitForAll(QueuedResourceProcessor.java:121) at com.android.builder.internal.aapt.QueuedResourceProcessor.end(QueuedResourceProcessor.java:141) at com.android.builder.internal.aapt.v2.QueueableAapt2.close(QueueableAapt2.java:104) at com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.doFullTaskAction(LinkApplicationAndroidResourcesTask.java:293) ... 122 more Caused by: com.android.ide.common.process.ProcessException: Failed to execute aapt at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:809) at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:797) at com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.invokeAaptForSplit(LinkApplicationAndroidResourcesTask.java:491) ... 123 more Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482) at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79) at com.android.builder.internal.aapt.AbstractAapt.link(AbstractAapt.java:34) at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:807) ... 125 more Caused by: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462) at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79) at com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$makeValidatedPackage$1(QueueableAapt2.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ... 1 more Caused by: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details at com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:443) at com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:395) at com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:312) at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)

    opened by meghashyamnb 1
  • Problem in integration

    Problem in integration

    Error:Host name 'repo.commonsware.com.s3.amazonaws.com' does not match the certificate subject provided by the peer (CN=*.s3.amazonaws.com, O=Amazon.com Inc., L=Seattle, ST=Washington, C=US)

    opened by Anu07 0
Owner
JW
Freelance Android/Flutter dev helping startups solve technical problems, scale products & grow. Footballer, built million-downloads app.
JW
A sample project of implementing Liveness Detection and Identity OCR on Android app using Kredibel Vision SDK

Vision Sample (Android) A sample project of implementing Liveness Detection and Identity OCR on Android app using Kredibel Vision SDK. You can checkou

null 10 Nov 27, 2022
Project of an sdk user, for default implementations of login/register user

Login_Manager Project of an sdk user, for default implementations of login/register user Implementation For use, is necessary: configure the feature c

null 0 Feb 5, 2022
Android Weather Library: android weather lib to develop weather based app fast and easily

WeatherLib Android weather lib is an android weather aggregator. The lib helps you getting weather data from the most importat weather provider. It su

Surviving with android (by Francesco Azzola) 641 Dec 23, 2022
Library for Android In-App Billing (Version 3+)

Checkout (Android In-App Billing Library) Description Checkout is an implementation of Android In-App Billing API (v3+). Its main goal is to make inte

Sergey Solovyev 1k Nov 26, 2022
Donations library for Android. Supports Google Play Store, Flattr, PayPal, and Bitcoin

Android Donations Lib Android Donations Lib supports donations by Google Play Store, Flattr, PayPal, and Bitcoin. It is used in projects, such as Open

Sufficiently Secure 346 Jan 8, 2023
A clustering library for the Google Maps Android API v2

DEPRECATED Don't use this. The Maps v3 SDK handles markers. That with a few other cool utilities make this library obsolete! Clusterkraf A clustering

Ticketmaster Mobile Studio 258 Nov 28, 2022
Donations library for Android. Supports Google Play Store, Flattr, PayPal, and Bitcoin

Android Donations Lib Android Donations Lib supports donations by Google Play Store, Flattr, PayPal, and Bitcoin. It is used in projects, such as Open

Sufficiently Secure 345 Dec 21, 2022
Small library that wraps Google Play Service API in brilliant RxJava Observables reducing boilerplate to minimum.

ReactiveLocation library for Android Small library that wraps Google Play Services API in brilliant RxJava Observables reducing boilerplate to minimum

Michał Charmas 2.1k Dec 4, 2022
this is the demo of billing new library v3

Billing library v3 demo android This is the demo of billing new library v3 for android native IMPORTANT 1- you must have login to google play store to

Muhammad Sikandar 3 Dec 6, 2021
Sdk-android - SnapOdds Android SDK

Documentation For the full API documentation go to https://snapodds.github.io/sd

Snapodds 0 Jan 30, 2022
AWS SDK for Android. For more information, see our web site:

AWS SDK for Android For new projects, we recommend interacting with AWS using the Amplify Framework. The AWS SDK for Android is a collection of low-le

AWS Amplify 976 Dec 29, 2022
Accept PayPal and credit cards in your Android app

Important: PayPal Mobile SDKs are Deprecated. The APIs powering them will remain operational long enough for merchants to migrate, but the SDKs themse

PayPal 802 Dec 22, 2022
Powerful custom Android Camera with granular control over the video quality and filesize, restricting recordings to landscape only.

LandscapeVideoCamera Highly flexible Android Camera which offers granular control over the video quality and filesize, while restricting recordings to

Jeroen Mols 1.2k Dec 29, 2022
Countly Product Analytics Android SDK

Countly Android SDK We're hiring: Countly is looking for Android SDK developers, full stack devs, devops and growth hackers (remote work). Click this

Countly Team 648 Dec 23, 2022
Android Real Time Chat & Messaging SDK

Android Chat SDK Overview Applozic brings real-time engagement with chat, video, and voice to your web, mobile, and conversational apps. We power emer

Applozic 659 May 14, 2022
Evernote SDK for Android

Evernote SDK for Android version 2.0.0-RC4 Evernote API version 1.25 Overview This SDK wraps the Evernote Cloud API and provides OAuth authentication

Evernote 424 Dec 9, 2022
SocialAuth repository which contains socialauth android version and samples

SocialAuth Android is an Android version of popular SocialAuth Java library. Now you do not need to integrate multiple SDKs if you want to integrate y

3Pillar Global Open Source 318 Dec 30, 2022
Air Native Extension (iOS and Android) for the Facebook mobile SDK

Air Native Extension for Facebook (iOS + Android) This is an AIR Native Extension for the Facebook SDK on iOS and Android. It has been developed by Fr

Freshplanet 219 Nov 25, 2022