Skip to content

Latest commit

 

History

History
953 lines (598 loc) · 29.2 KB

ReleaseNote.md

File metadata and controls

953 lines (598 loc) · 29.2 KB

This product supports Android 5.0(API Level 21) or later

Version 2.16.2

  • Update target sdk:
    • The targetSdk version has been updated to 34.

Version 2.16.1

  • Improves the performance of the open() function of the NcgEpubFile class:
    • If there are A1.ncg, A2.ncg, A3.ncg, ... etc. inside the AAA.epub file, it is faster to read the A2 and A3 files because the DRM header is read only when the A1.ncg file is opened for the first time.

Version 2.16.0

What's New in Version 2.16.0

Added Added Builder class.

  • Users can now use the Builder class to create Ncg2Agent objects when they create them.

Added Added Ncg2Agent functions.

  • New functions using LicenseConfig have been added, including the ability to request licenses without using AsyncTask.
    • void acquireLicense(LicenseConfig, Callback, Callback)
    • void removeLicense(LicenseConfig)
    • void checkLicenseValid(LicenseConfig)
    • void getLicenseInfo(LicenseConfig)
    • void updateSecureTime(Callback, Callback)

Changed Internal library enhancements and performance improvements.

  • Fixed a crash in the registerReceiver() function during NCG init().

Changed Change from DoxyGen documentation to javadoc documentation. Changed The library distribution method has been changed to AARs.

Version 2.15.0

What's New in Version 2.15.0

Added Added LicenseConfig class.

  • The LicenseConfig class allows users to set the required parameters when requesting a license.

Version 2.14.1

What's New in Version 2.14.1

Removal NcgZipArchive related classes have been removed.

  • The NcgZipArchive, NcgZipCore, NcgZipEntry, NcgZipException, and NcgZipInputStream classes have been removed due to speed and performance issues.
  • Among the library so files, libPocoFoundation.so and libPocoZip.so have been removed.
  • For customers using NcgZipArchive related features, please use NcgEpubFile from now on.

Version 2.14.0

What's New in Version 2.14.0

Added Added the NcgEpubFile class.

  • The NcgEpubFile class allows you to quickly consume a series of NCG contents with the same CID.
  • Ncg2Agent.createNcgEpub() function to create an object.
  • NcgEpubFile
    • void release()
    • void open(String path)
    • void prepare()
    • void close()
    • long read(byte[] buff, long sizeToRead)
    • void seek(long offset, NcgEpubFile.SeekMethod seekMethod)
    • long getCurrentFilePointer()
    • int getHeaderSize()
    • InputStream getInputStream()
    • int decreasePlayCount()

Version 2.13.0

What's New in Version 2.13.0

Added You can register callbacks for Local File

  • LocaFileCallback allows you to register callbacks to access and use local files internally in the SDK, allowing for intermediate processing in your app.
  • You can register a callback using the setLocalFileCallback(LocalFileCallback callback) function.
  • LocalFileCallback
    • Boolean fileOpen(String filePath, String openMode, int cloneNum)
    • void fileClose(int cloneNum)
    • byte[] fileRead(long numBytes, int cloneNum)
    • long fileWrite(byte[] data, long numBytes, int cloneNum)
    • long getFileSize(int cloneNum)
    • long setFilePointer(long distanceToMove, int moveMethod, int cloneNum)

Version 2.12.2

What's New in Version 2.12.2

Added New parameter for the init function.

  • init(Context context, OfflineSupportPolicy policy, String deviceID, String roDbPath, String prefixPreferenceName, boolean isFirstCallAfterBoot)
  • From now on, prefixPreferenceName has been added to the init function parameters.
  • The prefixPreferenceName parameter allows you to change the SharedPreference name being used inside the SDK.
  • However, if you set prefixPreferenceName in init, you need to set prefixPreferenceName when using DeviceManager.

Added Added Builder pattern when creating DeviceManager

  • From now on, you can create it using the Builder pattern, and you can set the prefixName.
  • If you set the prefixPreferenceName in init, you need to set the same prefixName when using DeviceManager.

Version 2.12.1

What's New in Version 2.12.1

Added Ncg2DeviceIdException has been added.

  • Occurs when there is a problem with the state of the device when generating the Device ID inside the NCG (reboot the device and restart MediaDrm).

Version 2.12.0

What's New in Version 2.12.0

Added Now support epub (zip).

  • Supports the zip.ncg file, so you can use it without decrypting the zip file.
NcgZipArchive ncgZipArchive = createNcgZipArchive();
ncgZipArchive.open("file path"); // file open

NcgZipEntry zipEntry = ncgZipArchive.findEntry("entry name"); // get NcgZipEntry for entry name in zip file.
InputStream in = zipEntry.getInputStream(); // get InputStream for file in zip.

ncgZipArchive.getZipEntries(); // get all files in zip.

ncgZipArchive.close(); // file close

Version 2.11.2

What's New in Version 2.11.2

Added An API to set whether to allow emulators during development is added.

Ncg2Agent - enableVirtualMachine()
Ncg2Agent - disableVirtualMachine()

Version 2.11.1

What's New in Version 2.11.1

Update The download storage location is changed in the sample app (Scoped Storage compatible).

Version 2.11.0

What's New in Version 2.11.0

Fixed NCG Core bug fixes and stability improvements.

Version 2.10.3

What's New in Version 2.10.3

Fixed In case of license issuance error (7003) and Device ID is Widevine UUID, Device ID and RODB are initialized.

  • The stored license information is deleted by initialization of RODB, and Ncg2Agent.init() function must be called.

    // Occurs when the license issuance error NCGERR_LICENSE_SERVER_RESPONSE_CERTIFICATE_ERROR and
    // the Device ID is a Widevine UUID. In this case, Ncg2Agent.Init()must be called again.
    Ncg2CoreErrorCode.NCGERR_LICENSE_SERVER_RESPONSE_CERTIFICATE_ERROR_AND_DEVICEID_IS_WIDEVINE_UUID
  • Please refer to the example in the Ncg2SdkWrapperListenerImpl.java file.

    	@Override
    	public void onServerError(final Ncg2ServerResponseErrorException e,
    			String string, final int serverErrorCode) {
    
    		mHandler.post(new Runnable() {
    
    			@Override
    			public void run() {
    				if (serverErrorCode == Ncg2CoreErrorCode.NCGERR_LICENSE_SERVER_RESPONSE_CERTIFICATE_ERROR_AND_DEVICEID_IS_WIDEVINE_UUID) {
    					Ncg2SdkWrapper.getInstance().init(mContext, Ncg2SdkWrapperListenerImpl.this);
          }
    
          ...
    
       }
    }

Version 2.10.2

What's New in Version 2.10.2

Changed Changed to SqlCipher library built with Android 11 target and version 4.4.3.

  • The SqlCipher version has changed so you must add androidx.sqlite:sqlite dependency to your app module build.gradle.

    // Android App build.gradle
    dependencies {
     	implementation "androidx.sqlite:sqlite:2.1.0"
    }

Fixed The buffer size for downloading m3u8 files is changed.

Version 2.10.1

What's New in Version 2.10.1

Fixed Fixed to release MediaDrm.

Version 2.10.0

What's New in Version 2.10.0

Improve Widevine UUID generation logic is improved.

  • The Widevine UUID generation logic and the generated MediaDrm release timing are improved.

Version 2.9.0

What's New in Version 2.9.0

Added Http Live Streaming content key file protection logic is added.

  • A logic has been added to prevent the leakage of HLS content keys by accessing the local web server.

Version 2.8.0

What's New in Version 2.8.0

Added The getTokenInfo()function is added.

  • Check the given Token information through getTokenInfo() function.
public abstract class Ncg2Agent {
    public abstract PallyconTokenInfo getTokenInformation(String token) throws Ncg2Exception;
}

Update The Sample is updated to acquire a license with Token

Version 2.7.0

What's New in Version 2.7.0

Add Playback of downloaded NCG HLS content is supported.

  • Downloaded NCG-HLS content is played in Exoplayer.
// If you set the saved HLS path, it returns the URL (path) to play the encrypted content.
public String addHttpLiveStreamUrlForLocalPlayback(String path) throws Ncg2InvalidLicenseException, Ncg2Exception;
  • Sample
//
// advanced sample -> MainActivity.java
//
void startHlsPlayerActivity(String localM3U8Path) {
    ...
    if (isLocalM3U8) {
        playbackURL = ncgLocalWebServer.addHttpLiveStreamUrlForLocalPlayback(contentPath);
    } else {
        if (mGlobal.mIsLive == true) {
            playbackURL = ncgLocalWebServer.addHttpLiveStreamUrlForPlayback(contentPath, true);
        } else {
            playbackURL = ncgLocalWebServer.addHttpLiveStreamUrlForPlayback(contentPath, false);
        }
    }
    ...
}

NOTE

If the downloaded NCG HLS content cannot be played through the SDK, please contact us with the content.

SDK does not support m3u8 file download function.

Update NCG Core has been updated to v2.4.0.

  • Supports players to play encrypted NCG HLS content.

Version 2.6.3

What's New in Version 2.6.3

Add 'scoped storage' permission is added to the SDK Sample project.

  • When downloading files on Android 10, you need to set android:requestLegacyExternalStorage to true.
// https://developer.android.com/training/data-storage/use-cases#opt-out-scoped-storage
<manifest ... >
    <!-- This attribute is "false" by default on apps targeting
        Android 10 or higher. -->
    <application android:requestLegacyExternalStorage="true" ... >
        ...
    </application>
</manifest>

Version 2.6.2

What's New in Version 2.6.2

Added APIs that can be licensed with tokens are added.

  • It is an API that can acquire licenses using token information.
public void acquireLicenseByToken(String token, String acquisitionURL, boolean isTemporary )
			throws Ncg2ServerResponseErrorException, Ncg2HttpException, Ncg2Exception

Version 2.6.1

What's New in Version 2.6.1

Fixed Sample project errors are fixed.

  • Fixed a problem that could not be executed due to an error when executing the sample project.

Version 2.6.0

What's New in Version 2.6.0

Added Added setRootingCheckLevel() API, which allows you to specify the strength when checking Android routing.

  • It is divided into 1 to 4 levels, and the default is level 1.
level = 1 Default Level.
  	 SU EXISTS,SU BINARY,SUPERUSER APK,PERMISSIVE SELINUX,RESETPROP,WRONG PATH PERMITION,
  	 DANGEROUS PROPS,BUSYBOX BINARY,XPOSED,RESETPROP,TEST KEYS,DEV KEYS,NON RELEASE KEYS
level = 2 SU EXISTS,SU BINARY,SUPERUSER APK,PERMISSIVE SELINUX,RESETPROP,WRONG PATH PERMITION,
  	 DANGEROUS PROPS,BUSYBOX BINARY,XPOSED,RESETPROP
level = 3 SU EXISTS,SU BINARY,SUPERUSER APK,PERMISSIVE SELINUX,RESETPROP,WRONG PATH PERMITION
level = 4 SU EXISTS,SU BINARY

Version 2.5.5

What's New in Version 2.5.5

Changed Changed to Target 28 -> 29.

  • Target version is changed to 29 according to Google policy.

Changed From Android Q(API 29), the'Widevine' UUID is used as the Device ID.

  • As of Android Q (API 29), TELEPHONY_SERVICE cannot be used.
  • Widevine UUID is used when all the following conditions are met.
    • Device is Android Q (API 29) or higher
    • Widevine DRM support
    • In case of Widevine security level (securityLevel) L1

Version 2.5.4

What's New in Version 2.5.4

Changed The changed NCG Core is applied.

  • URI extraction function in EXT-X-MAP from m3u8 file is added to NCG Core and applied to NCG SDK.

Changed The NCG Advanced Sample changes to call different players depending on whether they are HLS content.

  • For HLS content, it is played by calling MediaPlayer from startHlsPlayerActivity().
  • Played through Exoplayer if not HLS content.

Version 2.5.3

What's New in Version 2.5.3

Changed Android Rooting check is changed.

Version 2.5.2

What's New in Version 2.5.2

Changed NCG Core logs are output outside the SDK.

  • Secure Time related logs are output to NcgExceptionalEventListener.
  • NCG Core All logs are not output.

Version 2.5.1

What's New in Version 2.5.1

Changed Android Target Sdk Version Change(27 -> 28)

  • Android Target Sdk Version changed from 27 to 28.
  • AndroidX is applied.

Fixed Fixed External Display Detection and Rooting Checking.

  • Fixed an issue that prevented external output and routing checking on some devices.

Version 2.5.0

What's New in Version 2.5.0

Fixed Removed crash on local web server.

  • The crash on the local web server has been removed.

Version 2.4.0

What's New in Version 2.4.0

Changed Support for Android 64bit(arm64-v8a, x86_64)

  • Google has included Android ABI arm64-v8a, x86_64 in the NCG SDK with the requirement to support Android 64bit since August 2019.
  • NCG SDK v2.4.0 must be applied in order to register apps for Google Play since August.

Changed Change Android API Level minimum support(API 15 -> 16)

  • Minimal support in NDK has been changed to Android API Lebel 16 while supporting NCG SDK 64bit.
  • Minimum support for Android at 64bit is Android API Lebel 21.

Version 20190509 (released 2019-05-09)

What's New in Version 2.3.3

Added BlueStacks 4 detection add

  • Fixed SDK to detect new BlueStacks 4.
  • Limited use of the SDK in BlueStacks4.

Version 20190226 (released 2019-02-26)

  • Applying ExoPlayer 2.9.3
  • Fixed internal errors when running on Android 9.0

1. SDK API

Added

Changed

Removal

Fixed

2. Sample Source

Added

Changed

Removal

Fixed


Version 20181221 (released 2018-12-21)

  • Core patch to disallow emulators provided by Android SDK.

1. SDK API

Added

Changed

Removal

Fixed

2. Sample Source

Added

Changed

Removal

Fixed


Version 20180912 (released 2018-09-12)

  • Core patch for HLS playback error.
  • added simple sample.

1. SDK API

Added

Changed

Removal

Fixed

2. Sample Source

Added

Changed

Removal

Fixed


Version 20180903 (released 2018-09-03)

  • Correct the previous securetime and the current securetime acquisition logic equally.

1. SDK API

Added

Changed

Removal

Fixed

2. Sample Source

Added

Changed

Removal

Fixed


Version 20180726 (released 2018-08-06)

  • HLS live
  • DefaultPlayer : ExoPlayer

1. SDK API

Added

Ncg2LocalWebServer - addHttpLiveStreamUrlForPlayback(String url, boolean isLiveHLS)
Ncg2LocalWebServer - addHttpLiveStreamUrlForPlayback(String url, String cid, String siteID, boolean isLiveHLS)

Changed

Default Activity : MediaPlayerActivity -> ExoPlayerActivity

Removal

Fixed

2. Sample Source

Added

ExoPlayerActivity.java for hls live
layout_exoplayer.xml for hls live

Changed

Global.java for hls live
MainActivity.java for hls live

Removal

Fixed


Version 20170215 (released 2017-02-21)

  • Enhanced security patch has been updated.

1. SDK API

Added

Changed

Removal

Fixed

2. Sample Source

Added

Changed

Removal

Fixed


Version 20170207 (released 2017-02-08)

  • Virtual machine detection added.
    > Ncg2FatalException has been added.
    > Please add the code for the user guide and the app exit in the exception.
  • The maximum length of OId in license request has increased to 4096 bytes

1. SDK API

Added

Changed

Removal

Fixed

2. Sample Source

Added

Changed

public boolean init(Context context, Ncg2SdkWrapperListener listener) {
    mListener = listener;
    mContext = context;
    mHandler = new Handler();
    mHttpRequestCallback = new NcgHttpRequestCallbackImpl(context);
    OfflineSupportPolicy policy = OfflineSupportPolicy.OfflineSupport;
    policy.setCountOfExecutionLimit(0);
    try {
        mNcg2Agent.init(context, policy);
        mNcg2Agent.setHttpRequestCallback(mHttpRequestCallback );
        mNcg2Agent.enableLog();
        mNcg2Agent.getLocalWebServer().setWebServerListener(mWebserverListener);

    } catch (Ncg2FatalException e) {
        e.printStackTrace();
        mListener.onAppFinishedError(e);
        return false;

    } catch (Ncg2ReadPhoneStateException e) {
        e.printStackTrace();
        mListener.onSecurityError(e);
        return false;

    } catch (Ncg2Exception e) {
        e.printStackTrace();
        mListener.onError(e, "init() Exception : " + e.getMessage());
        return false;
    }

    return true;
}

Removal

Fixed


Version 20161010 (released 2016-10-14)

  • READ_PHONE_STATE Error
    > Ncg2ReadPhoneStateException have been added.
    > 1. Please add the code for the app such as user guides and exit on the right in this exception.
  • NCGERR_MODIFIED_DBFILE_INO Error > Ncg2ModifiedDBFileInoException have been added
    > 1. please remove RODBFile in this exception by using new SDK API.
    > 2. Please add the user guide and code of the app exit in this exception.

1. SDK API

Added

public abstract void removeRODBFile(Context context);
public abstract void removeRODBFile(Context context, String roDbPath);

Changed

public abstract void init(Context context, OfflineSupportPolicy policy) throws Ncg2ReadPhoneStateException, Ncg2ModifiedDBFileInoException, Ncg2Exception;

Removal

Fixed

2. Sample Source

Added

Changed

public boolean init(Context context, Ncg2SdkWrapperListener listener) {
    mListener = listener;
    mContext = context;
    mHandler = new Handler();
    mHttpRequestCallback = new NcgHttpRequestCallbackImpl(context);
    OfflineSupportPolicy policy = OfflineSupportPolicy.OfflineSupport;
    policy.setCountOfExecutionLimit(0);
    try {
        mNcg2Agent.init(context, policy);
        mNcg2Agent.setHttpRequestCallback(mHttpRequestCallback );
        mNcg2Agent.enableLog();
        mNcg2Agent.getLocalWebServer().setWebServerListener(mWebserverListener);

    } catch (Ncg2ReadPhoneStateException e) {
        e.printStackTrace();
        mListener.onSecurityError(e);
        return false;

    } catch (Ncg2ModifiedDBFileInoException e) {
        e.printStackTrace();
        mNcg2Agent.removeRODBFile(context);
        mListener.onModifiedDBFileInoError(e);
        return false;

    } catch (Ncg2Exception e) {
        e.printStackTrace();
        mListener.onError(e, "init() Exception : " + e.getMessage());
        return false;
    }

    return true;
}
@Override
public void onModifiedDBFileInoError(Exception e) {
    // TODO Auto-generated method stub
    AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
    builder.setTitle(R.string.error_dialog_title);
    builder.setMessage(mActivity.getString(R.string.modified_dbfile_ino_error));
    builder.setPositiveButton(mActivity.getString(R.string.confirm), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            mActivity.finish();
        }
    });

    Dialog dialog = builder.create();
    dialog.setCancelable(false);
    dialog.setCanceledOnTouchOutside(false);
    dialog.show();
}

@Override
public void onSecurityError(Exception e) {
    // TODO Auto-generated method stub
    AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
    builder.setTitle(R.string.error_dialog_title);
    builder.setMessage(mActivity.getString(R.string.security_read_phone_state_error));
    builder.setPositiveButton(mActivity.getString(R.string.confirm), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            mActivity.finish();
        }
    });

    Dialog dialog = builder.create();
    dialog.setCancelable(false);
    dialog.setCanceledOnTouchOutside(false);
    dialog.show();
}

Removal

Fixed


Version 20160531 (released 2016-06-15)

  • After July 11, 2016, Google Play will block publishing of any new apps or updates that use older versions of OpenSSL.
    > After July 11th 2016, You should use this SDK to update your app.
  • All so & jar file should be changed.

Added

OpenSSL version is updated to 1.0.2g (libsqlcipher_android.so)

Changed

Removal

Fixed


Version 20160531 (released 2016-06-03)

  • After July 11, 2016, Google Play will block publishing of any new apps or updates that use older versions of OpenSSL.
    > After July 11th 2016, You should use this SDK to update your app.

Added

OpenSSL version updated to 1.0.1s.

Changed

Removal

Fixed


Version 20160111 (released 2016-01-11)

Added

Your application should use a package name which is authorized by INKA. Media player may not work properly if unauthorized package name is used. In case of changing package name, please contact us for the authorization process.

Changed

Removal

Fixed


Version 20160108 (released 2016-01-08)

Added

Changed

Removal

Fixed

allowable secure time's error range is increased from 24 hour to 1 hours. ( by reverting libNCG2_JNI.so which is created at 20151029)


Version 20151218 (released 2015-12-18)

Added

suspend function is same as pause function functionally.

public abstract void suspend() throws Ncg2Exception;

Changed

allowable secure time's error range is increased from 1 hour to 24 hours

Removal

Fixed


Version 20151120 (released 2015-11-20)

Added

Can set secure setting for preventing media from screencapture (default : true)

public abstract class Ncg2Player {
    public abstract void setSecure(boolean isSecureSurfaceView);
}

Changed

Removal

Fixed


Version 20151029 (released 2015-10-29)

Added

Cookie data can be sent when playing DnP(download and play). NCG LocalWebServer can request with the cookie data.

public abstract class Ncg2Player {
    public abstract void setDataSource(String path, String remoteUrlForDnp, long fileSize, String customCookie) throws IllegalArgumentException, IllegalStateException, IOException,Ncg2Exception;
}

Changed

Removal

Fixed


Previous Version

Added

S/W speed control(trick play) option is added. Previously the option was configured automatically, but now the H/W and S/W speed control option should be set manually in configuration. Must be added to the SW speed settings feature that allows you to turn on some terminals, because if HW playback is not smooth (default: HW)

public abstract class Ncg2Player {
    public abstract void setSwCodecMode(boolean enableSwCodec);
}

You can turn off function of detecting screen recorder app. (default: On)

public abstract class Ncg2Agent {
    public abstract void enableScreenRecorderDetecting(boolean isEnabled);
}

Changed

Removal

Fixed


History of previous version is given on the release_note.txt file. Please refer it.