diff --git a/src/java/com/android/ike/eap/EapSessionConfig.java b/src/java/com/android/ike/eap/EapSessionConfig.java
index 285dc79..e3d7743 100644
--- a/src/java/com/android/ike/eap/EapSessionConfig.java
+++ b/src/java/com/android/ike/eap/EapSessionConfig.java
@@ -46,7 +46,7 @@
     public final byte[] eapIdentity;
 
     @VisibleForTesting
-    EapSessionConfig(Map<Integer, EapMethodConfig> eapConfigs, byte[] eapIdentity) {
+    public EapSessionConfig(Map<Integer, EapMethodConfig> eapConfigs, byte[] eapIdentity) {
         this.eapConfigs = Collections.unmodifiableMap(eapConfigs);
         this.eapIdentity = eapIdentity;
     }
diff --git a/src/java/com/android/ike/ikev2/ChildSaProposal.java b/src/java/com/android/ike/ikev2/ChildSaProposal.java
index 92c717e..264890f 100644
--- a/src/java/com/android/ike/ikev2/ChildSaProposal.java
+++ b/src/java/com/android/ike/ikev2/ChildSaProposal.java
@@ -59,17 +59,17 @@
         mEsns = esns;
     }
 
-    /** Package private method to get ESN policies. */
-    EsnTransform[] getEsnTransforms() {
+    /** Gets all ESN policies. */
+    public EsnTransform[] getEsnTransforms() {
         return mEsns;
     }
 
     /**
-     * Package private method to get a copy of proposal without all proposed DH groups.
+     * Gets a copy of proposal without all proposed DH groups.
      *
      * <p>This is used to avoid negotiating DH Group for negotiating first Child SA.
      */
-    ChildSaProposal getCopyWithoutDhTransform() {
+    public ChildSaProposal getCopyWithoutDhTransform() {
         return new ChildSaProposal(
                 getEncryptionTransforms(),
                 getIntegrityTransforms(),
diff --git a/src/java/com/android/ike/ikev2/ChildSessionConfiguration.java b/src/java/com/android/ike/ikev2/ChildSessionConfiguration.java
index 555feb0..b2c1c76 100644
--- a/src/java/com/android/ike/ikev2/ChildSessionConfiguration.java
+++ b/src/java/com/android/ike/ikev2/ChildSessionConfiguration.java
@@ -41,11 +41,12 @@
     private final List<LinkAddress> mInternalAddressList;
 
     /**
-     * Package private constructor for building an ChildSessionConfiguration
+     * Construct an instance of {@link ChildSessionConfiguration}.
      *
-     * <p>It is only supported to build a ChildSessionConfiguration with a Configure(Reply) Payload.
+     * <p>It is only supported to build a {@link ChildSessionConfiguration} with a Configure(Reply)
+     * Payload.
      */
-    ChildSessionConfiguration(
+    public ChildSessionConfiguration(
             List<IkeTrafficSelector> inTs,
             List<IkeTrafficSelector> outTs,
             IkeConfigPayload configPayload) {
@@ -91,8 +92,9 @@
         }
     }
 
-    /** Package private constructor for building an ChildSessionConfiguration */
-    ChildSessionConfiguration(List<IkeTrafficSelector> inTs, List<IkeTrafficSelector> outTs) {
+    /** Construct an instance of {@link ChildSessionConfiguration}. */
+    public ChildSessionConfiguration(
+            List<IkeTrafficSelector> inTs, List<IkeTrafficSelector> outTs) {
         mInboundTs = Collections.unmodifiableList(inTs);
         mOutboundTs = Collections.unmodifiableList(outTs);
         mInternalAddressList = new LinkedList<>();
diff --git a/src/java/com/android/ike/ikev2/ChildSessionOptions.java b/src/java/com/android/ike/ikev2/ChildSessionOptions.java
index 0519416..fe7a12e 100644
--- a/src/java/com/android/ike/ikev2/ChildSessionOptions.java
+++ b/src/java/com/android/ike/ikev2/ChildSessionOptions.java
@@ -53,23 +53,19 @@
         mIsTransport = isTransport;
     }
 
-    /** Package private */
-    IkeTrafficSelector[] getLocalTrafficSelectors() {
+    public IkeTrafficSelector[] getLocalTrafficSelectors() {
         return mLocalTrafficSelectors;
     }
 
-    /** Package private */
-    IkeTrafficSelector[] getRemoteTrafficSelectors() {
+    public IkeTrafficSelector[] getRemoteTrafficSelectors() {
         return mRemoteTrafficSelectors;
     }
 
-    /** Package private */
-    ChildSaProposal[] getSaProposals() {
+    public ChildSaProposal[] getSaProposals() {
         return mSaProposals;
     }
 
-    /** Package private */
-    boolean isTransportMode() {
+    public boolean isTransportMode() {
         return mIsTransport;
     }
 
diff --git a/src/java/com/android/ike/ikev2/IkeManager.java b/src/java/com/android/ike/ikev2/IkeManager.java
index 38ab15b..08b93a0 100644
--- a/src/java/com/android/ike/ikev2/IkeManager.java
+++ b/src/java/com/android/ike/ikev2/IkeManager.java
@@ -80,13 +80,15 @@
         return sIkeLog;
     }
 
+    /** Injects IKE logger for testing. */
     @VisibleForTesting
-    static void setIkeLog(Log log) {
+    public static void setIkeLog(Log log) {
         sIkeLog = log;
     }
 
+    /** Resets IKE logger. */
     @VisibleForTesting
-    static void resetIkeLog() {
+    public static void resetIkeLog() {
         sIkeLog = new Log(IKE_TAG, LOG_SENSITIVE);
     }
 }
diff --git a/src/java/com/android/ike/ikev2/IkeSaProposal.java b/src/java/com/android/ike/ikev2/IkeSaProposal.java
index 788c7f9..bb13b60 100644
--- a/src/java/com/android/ike/ikev2/IkeSaProposal.java
+++ b/src/java/com/android/ike/ikev2/IkeSaProposal.java
@@ -62,8 +62,8 @@
         mPseudorandomFunctions = prfs;
     }
 
-    /** Package private method to get all PRFs. */
-    PrfTransform[] getPrfTransforms() {
+    /** Gets all PRFs. */
+    public PrfTransform[] getPrfTransforms() {
         return mPseudorandomFunctions;
     }
 
diff --git a/src/java/com/android/ike/ikev2/IkeSessionOptions.java b/src/java/com/android/ike/ikev2/IkeSessionOptions.java
index d722225..b66630d 100644
--- a/src/java/com/android/ike/ikev2/IkeSessionOptions.java
+++ b/src/java/com/android/ike/ikev2/IkeSessionOptions.java
@@ -43,10 +43,10 @@
     @IntDef({IKE_AUTH_METHOD_PSK, IKE_AUTH_METHOD_PUB_KEY_SIGNATURE, IKE_AUTH_METHOD_EAP})
     public @interface IkeAuthMethod {}
 
-    // Package private constants to describe user configured authentication methods.
-    static final int IKE_AUTH_METHOD_PSK = 1;
-    static final int IKE_AUTH_METHOD_PUB_KEY_SIGNATURE = 2;
-    static final int IKE_AUTH_METHOD_EAP = 3;
+    // Constants to describe user configured authentication methods.
+    public static final int IKE_AUTH_METHOD_PSK = 1;
+    public static final int IKE_AUTH_METHOD_PUB_KEY_SIGNATURE = 2;
+    public static final int IKE_AUTH_METHOD_EAP = 3;
 
     private final InetAddress mServerAddress;
     private final UdpEncapsulationSocket mUdpEncapSocket;
@@ -82,44 +82,40 @@
         mIsIkeFragmentationSupported = isIkeFragmentationSupported;
     }
 
-    /** Package private */
-    InetAddress getServerAddress() {
+    public InetAddress getServerAddress() {
         return mServerAddress;
     }
-    /** Package private */
-    UdpEncapsulationSocket getUdpEncapsulationSocket() {
+
+    public UdpEncapsulationSocket getUdpEncapsulationSocket() {
         return mUdpEncapSocket;
     }
-    /** Package private */
-    IkeSaProposal[] getSaProposals() {
+
+    public IkeSaProposal[] getSaProposals() {
         return mSaProposals;
     }
-    /** Package private */
-    IkeIdentification getLocalIdentification() {
+
+    public IkeIdentification getLocalIdentification() {
         return mLocalIdentification;
     }
-    /** Package private */
-    IkeIdentification getRemoteIdentification() {
+
+    public IkeIdentification getRemoteIdentification() {
         return mRemoteIdentification;
     }
-    /** Package private */
-    IkeAuthConfig getLocalAuthConfig() {
+
+    public IkeAuthConfig getLocalAuthConfig() {
         return mLocalAuthConfig;
     }
-    /** Package private */
-    IkeAuthConfig getRemoteAuthConfig() {
+
+    public IkeAuthConfig getRemoteAuthConfig() {
         return mRemoteAuthConfig;
     }
-    /** Package private */
-    boolean isIkeFragmentationSupported() {
+
+    public boolean isIkeFragmentationSupported() {
         return mIsIkeFragmentationSupported;
     }
-    /**
-     * Package private class that contains common information of an IKEv2 authentication
-     * configuration.
-     */
-    abstract static class IkeAuthConfig {
-        @IkeAuthMethod final int mAuthMethod;
+    /** This class contains common information of an IKEv2 authentication configuration. */
+    public abstract static class IkeAuthConfig {
+        @IkeAuthMethod public final int mAuthMethod;
 
         protected IkeAuthConfig(@IkeAuthMethod int authMethod) {
             mAuthMethod = authMethod;
@@ -127,11 +123,11 @@
     }
 
     /**
-     * Package private class that contains configuration for IKEv2 pre-shared-key-based
-     * authentication of local or remote side.
+     * This class represents the configuration to support IKEv2 pre-shared-key-based authentication
+     * of local or remote side.
      */
-    static class IkeAuthPskConfig extends IkeAuthConfig {
-        final byte[] mPsk;
+    public static class IkeAuthPskConfig extends IkeAuthConfig {
+        public final byte[] mPsk;
 
         private IkeAuthPskConfig(byte[] psk) {
             super(IKE_AUTH_METHOD_PSK);
@@ -140,11 +136,11 @@
     }
 
     /**
-     * Package private class that contains configuration for IKEv2 public-key-signature-based
+     * This class represents the configuration to support IKEv2 public-key-signature-based
      * authentication of the remote side.
      */
-    static class IkeAuthDigitalSignRemoteConfig extends IkeAuthConfig {
-        final TrustAnchor mTrustAnchor;
+    public static class IkeAuthDigitalSignRemoteConfig extends IkeAuthConfig {
+        public final TrustAnchor mTrustAnchor;
 
         private IkeAuthDigitalSignRemoteConfig(TrustAnchor trustAnchor) {
             super(IKE_AUTH_METHOD_PUB_KEY_SIGNATURE);
@@ -153,13 +149,13 @@
     }
 
     /**
-     * Package private class that contains configuration to do IKEv2 public-key-signature-based
+     * This class represents the configuration to support IKEv2 public-key-signature-based
      * authentication of the local side.
      */
-    static class IkeAuthDigitalSignLocalConfig extends IkeAuthConfig {
-        final X509Certificate mEndCert;
-        final List<X509Certificate> mIntermediateCerts;
-        final PrivateKey mPrivateKey;
+    public static class IkeAuthDigitalSignLocalConfig extends IkeAuthConfig {
+        public final X509Certificate mEndCert;
+        public final List<X509Certificate> mIntermediateCerts;
+        public final PrivateKey mPrivateKey;
 
         private IkeAuthDigitalSignLocalConfig(
                 X509Certificate clientEndCert,
@@ -173,7 +169,7 @@
     }
 
     /**
-     * Package private class that contains configuration to do EAP authentication of the local side.
+     * This class represents the configuration to support EAP authentication of the local side.
      *
      * <p>EAP MUST be used with IKEv2 public-key-based authentication of the responder to the
      * initiator. Currently IKE library does not support the IKEv2 protocol extension(RFC 5998)
@@ -184,8 +180,8 @@
      * @see <a href="https://tools.ietf.org/html/rfc5998">RFC 5998, An Extension for EAP-Only
      *     Authentication in IKEv2</a>
      */
-    static class IkeAuthEapConfig extends IkeAuthConfig {
-        final EapSessionConfig mEapConfig;
+    public static class IkeAuthEapConfig extends IkeAuthConfig {
+        public final EapSessionConfig mEapConfig;
 
         private IkeAuthEapConfig(EapSessionConfig eapConfig) {
             super(IKE_AUTH_METHOD_EAP);
diff --git a/src/java/com/android/ike/ikev2/IkeSessionStateMachine.java b/src/java/com/android/ike/ikev2/IkeSessionStateMachine.java
index 3e5d979..e9b0dc8 100644
--- a/src/java/com/android/ike/ikev2/IkeSessionStateMachine.java
+++ b/src/java/com/android/ike/ikev2/IkeSessionStateMachine.java
@@ -375,9 +375,9 @@
     @VisibleForTesting final State mDeleteIkeLocalDelete = new DeleteIkeLocalDelete();
     // TODO: Add InfoLocal.
 
-    // Testing constructor
+    /** Constructor for testing. */
     @VisibleForTesting
-    IkeSessionStateMachine(
+    public IkeSessionStateMachine(
             Looper looper,
             Context context,
             IpSecManager ipSecManager,
@@ -435,8 +435,8 @@
         start();
     }
 
-    /** Package private constructor */
-    IkeSessionStateMachine(
+    /** Construct an instance of IkeSessionStateMachine. */
+    public IkeSessionStateMachine(
             Looper looper,
             Context context,
             IpSecManager ipSecManager,
@@ -498,11 +498,13 @@
         }
     }
 
-    void openSession() {
+    /** Initiates IKE setup procedure. */
+    public void openSession() {
         sendMessage(CMD_LOCAL_REQUEST_CREATE_IKE, new LocalRequest(CMD_LOCAL_REQUEST_CREATE_IKE));
     }
 
-    void openChildSession(
+    /** Schedules a Create Child procedure. */
+    public void openChildSession(
             ChildSessionOptions childSessionOptions, ChildSessionCallback childSessionCallback) {
         if (childSessionCallback == null) {
             throw new IllegalArgumentException("Child Session Callback must be provided");
@@ -520,7 +522,8 @@
                         CMD_LOCAL_REQUEST_CREATE_CHILD, childSessionCallback, childSessionOptions));
     }
 
-    void closeChildSession(ChildSessionCallback childSessionCallback) {
+    /** Schedules a Delete Child procedure. */
+    public void closeChildSession(ChildSessionCallback childSessionCallback) {
         if (childSessionCallback == null) {
             throw new IllegalArgumentException("Child Session Callback must be provided");
         }
@@ -534,11 +537,13 @@
                 new ChildLocalRequest(CMD_LOCAL_REQUEST_DELETE_CHILD, childSessionCallback, null));
     }
 
-    void closeSession() {
+    /** Initiates Delete IKE procedure. */
+    public void closeSession() {
         sendMessage(CMD_LOCAL_REQUEST_DELETE_IKE, new LocalRequest(CMD_LOCAL_REQUEST_DELETE_IKE));
     }
 
-    void killSession() {
+    /** Forcibly close IKE Session. */
+    public void killSession() {
         // TODO: b/142977160 Support closing IKE Sesison immediately.
     }
 
@@ -2308,7 +2313,8 @@
     }
 
     /** CreateIkeLocalIkeInit represents state when IKE library initiates IKE_INIT exchange. */
-    class CreateIkeLocalIkeInit extends BusyState {
+    @VisibleForTesting
+    public class CreateIkeLocalIkeInit extends BusyState {
         private IkeSecurityParameterIndex mLocalIkeSpiResource;
         private IkeSecurityParameterIndex mRemoteIkeSpiResource;
         private Retransmitter mRetransmitter;
@@ -2957,7 +2963,7 @@
                                             + " notify type: "
                                             + notifyPayload.notifyType);
                         }
-
+                        break;
                     default:
                         logw(
                                 "Received unexpected payload in IKE AUTH response. Payload"
diff --git a/src/java/com/android/ike/ikev2/SaProposal.java b/src/java/com/android/ike/ikev2/SaProposal.java
index b012ea0..6076590 100644
--- a/src/java/com/android/ike/ikev2/SaProposal.java
+++ b/src/java/com/android/ike/ikev2/SaProposal.java
@@ -192,18 +192,15 @@
         return mProtocolId;
     }
 
-    /*Package private*/
-    EncryptionTransform[] getEncryptionTransforms() {
+    public EncryptionTransform[] getEncryptionTransforms() {
         return mEncryptionAlgorithms;
     }
 
-    /*Package private*/
-    IntegrityTransform[] getIntegrityTransforms() {
+    public IntegrityTransform[] getIntegrityTransforms() {
         return mIntegrityAlgorithms;
     }
 
-    /*Package private*/
-    DhGroupTransform[] getDhGroupTransforms() {
+    public DhGroupTransform[] getDhGroupTransforms() {
         return mDhGroups;
     }
 
diff --git a/src/java/com/android/ike/ikev2/TunnelModeChildSessionOptions.java b/src/java/com/android/ike/ikev2/TunnelModeChildSessionOptions.java
index 541930e..c207acc 100644
--- a/src/java/com/android/ike/ikev2/TunnelModeChildSessionOptions.java
+++ b/src/java/com/android/ike/ikev2/TunnelModeChildSessionOptions.java
@@ -54,8 +54,7 @@
         mConfigRequests = configRequests;
     }
 
-    /** Package private */
-    ConfigAttribute[] getConfigurationRequests() {
+    public ConfigAttribute[] getConfigurationRequests() {
         return mConfigRequests;
     }
 
diff --git a/tests/iketests/src/java/com/android/ike/ikev2/IkeSessionStateMachineTest.java b/tests/iketests/src/java/com/android/ike/ikev2/IkeSessionStateMachineTest.java
index 819c328..74b4003 100644
--- a/tests/iketests/src/java/com/android/ike/ikev2/IkeSessionStateMachineTest.java
+++ b/tests/iketests/src/java/com/android/ike/ikev2/IkeSessionStateMachineTest.java
@@ -713,7 +713,7 @@
         return ikeSession;
     }
 
-    static IkeSaProposal buildSaProposal() throws Exception {
+    public static IkeSaProposal buildSaProposal() throws Exception {
         return new IkeSaProposal.Builder()
                 .addEncryptionAlgorithm(
                         SaProposal.ENCRYPTION_ALGORITHM_AES_CBC, SaProposal.KEY_LEN_AES_128)
