Menu

VPN namespace changes

Overview

The Knox SDK v3.4 release will merge the existing Knox VPN framework into the Knox SDK. Following this release, all packages, intents, and permission names in the Knox SDK must migrate to the com.samsung.android.knox namespace instead of the legacy namespaces currently in use. This change applies to all VPN clients compatible with Knox SDK v3.0 or higher, whether the devices are running Android Q OS or not.

Not migrating to the new namespace will cause your VPN clients to malfunction, leaving your users without VPN access. To prevent this malfunction, we recommend updating your VPN clients to use the new namespace.

Note: Older devices and compatible VPN clients will continue to use legacy namespaces.

Namespace architecture

Currently, the VPN clients using the Knox SDK framework use the old namespaces. As the Knox SDK framework now uses new namespaces, the supportlib.jar library acts as a proxy and forwards any new namespace API requests from VPN clients compatible with Knox SDK v3.0 or lower. All VPN clients must move to the new namespace in Knox v3.4. With this change, old namespace calls from the Knox VPN framework—Knox v3.3 and lower—are converted to new namespace APIs on the updated VPN clients. Supportlib.jar is responsible for this conversion and so all VPN clients must include supportlib.jar to provide backward compatibility with old frameworks. The current namespace architecture is as follows.

After the Knox SDK v3.4 release, the new namespace architecture will change as follows.

Update VPN client app in Android Studio

Follow the instructions in this section to update your VPN client to use the new namespaces.

  1. In the AndroidManifest.xml file, add a new service declaration as follows:

    <service android:name="com.samsung.android.knox.net.vpn.KnoxONSVpnService" android:exported="false" >

    <intent-filter>

    <action android:name="{packageName}.BIND_SERVICE" /> </intent-filter> </service>

  2. Change the action name to update existing the Knox VPN service, as highlighted in red:

    <service android:name="{packageName}.KnoxVpnServiceImpl"android:exported="false" >

    <intent-filter>

    <action android:name="{packageName}.BIND_SERVICE_NEW" />

    </intent-filter> </service>

  3. In the build.gradle file (root directory), include the flatDir attribute as follows:

allprojects {

repositories {

jcenter()

flatDir {

dirs 'libs'

} } }

  1. In the client's project, under apps/libs/, add the latest supportlib.jar library. You can download the supportjar.lib file from SEAP > Knox SDK page > Overview section > supportlib.jar.
  2. In the build.gradle app directory, add an entry for multiDexEnabled as follows:

    defaultConfig {

    ...

    multiDexEnabled = true

    }

  3. In the client's project, under apps/libs/, add the knoxvpn_support.aar artifact. You can find this file in your SDK download folder > Assets folder.

  4. In the build.gradle app directory, under the dependencies entry, include the following compile entry:

    dependencies {

    ...

    compile(name:'knoxvpn_support', ext:'aar')

    }

  5. Update old namespace references to use new namespace—com.samsung.android.knox—as follows:

    Existing reference
    (old namespace)
    Change to
    (new namespace)
    import android.app.enterprise.CertificateInfo; import com.samsung.android.knox.keystore.CertificateInfo;
    import com.samsung.android.knox.keystore.CertificateInfo; import com.samsung.android.knox.net.vpn.serviceprovider.IKnoxVpnService;
    import com.sec.vpn.knox.GenericVpnContext; import com.samsung.android.knox.net.vpn.serviceprovider.GenericVpnContext;
    import com.sec.vpn.knox.GenericVpnService; import com.samsung.android.knox.net.vpn.serviceprovider.GenericVpnService;
  6. From the VPN client's project folder, remove all old namespace files, such as:
    • Under src/main/aidl/android/app/enterprise, remove CertificateInfo.aidl

    • Under src/main/java/android/app/enterprise, remove CertificateInfo.java

    • Under src/main/aidl/com/sec/enterprise/mdm/services/vpn/knoxvpn/, remove IKnoxVpnService.aidl