---
# System prepended metadata

title: Android Dependency & Package Structure Updates

---

# Android Dependency & Package Structure Updates
Prior to going GA (general availability) on the Android Checkout SDK we will want to make updates to our Group ID, Artifact ID, and package structure to ensure it's easy for developers to identify our product.

## Dependency Updates
Today the SDK uses `com.paypal.pyplcheckout` as a Group ID and the Artifact ID is `externalRelease`. For developers integrating with the SDK they would need to add the following to their gradle build script:

```groovy=
implementation "com.paypal.pyplcheckout:externalRelease:<VERSION_NUMBER>"
```

This can be difficult when trying to identify what the dependency is and it could make the developer ask the following questions: what is `pypl`, and where can I find the `internalRelease` for this SDK?

### Solution
We should update both the Group ID and Artifact ID to be more explicit and describe exactly what the dependency is. To do this we would update the Group ID to `com.paypal.checkout` to make it clear that this is a PayPal Checkout product. We would then use the Artifact ID of `android-sdk` to make it clear that this is an Android SDK for PayPal Checkout.

Developers would then provide the following in their gradle build script:

```groovy=
implementation "com.paypal.checkout:android-sdk:<VERSION_NUMBER>"
```

## Package Structure Updates
The current package structure will feel out of place after updating the Group and Artifact IDs. Today our root package is `com.paypal.pyplcheckout` which would be confusing if a developer just added a dependency with a Group ID of `com.paypal.checkout`.

### Solution
We should update our package structure so that it lines up with the new Group ID, appending `android` to make the package structure clear (and avoid collisions with other libraries under `com.paypal.checkout`). While updating our root package we would also modify the general library structure as well, moving any internal classes to an `internal` package and keeping top level SDK functionaity at the root package.

#### Package Updates
The largest change would be migrating most packages into an `internal` package. This would make it clear to applications integrating with our SDK that classes under this package are internal and should not be referenced directly as they are not protected from breaking API changes.

The next change is migrating code out of `merchantIntegration` and into feature packages under `com.paypal.checkout.android` as these are okay for merchants to access directly and are part of our public API.

The below list is not definititve but it attempts to outline the bulk of the changes we'd be looking to make.

|Current State|Future State|
|-------------|------------|
|`com.paypal.pyplcheckout`|`com.paypal.checkout.android`|
|`com.paypal.pyplcheckout.*`|`com.paypal.checkout.android.internal.*`|
|`com.paypal.pyplcheckout.merchantIntegration.order`|`com.paypal.checkout.android.order`|
|`com.paypal.pyplcheckout.merchantIntegration.createorder`|`com.paypal.checkout.android.order`|
|`com.paypal.pyplcheckout.merchantIntegration.smartpaymentbutton`|`com.paypal.checkout.android.smartpaymentbutton`|
|`com.paypal.pyplcheckout.utils.PayPalCheckoutSdk`|`com.paypal.checkout.android.PayPalCheckoutSdk`|
