diff --git a/.github/workflows/android_gradle.yml b/.github/workflows/android_gradle.yml
new file mode 100644
index 0000000..af67147
--- /dev/null
+++ b/.github/workflows/android_gradle.yml
@@ -0,0 +1,52 @@
+name: Android Gradle Build test logic
+
+on:
+ workflow_call:
+ inputs:
+ os:
+ required: true
+ type: string
+ jdk_distro:
+ required: true
+ type: string
+ jdk_version:
+ required: true
+ type: string
+
+jobs:
+ build_wolfssljni:
+ runs-on: ${{ inputs.os }}
+ steps:
+ - name: Clone wolfssljni
+ uses: actions/checkout@v4
+
+ # Clone native wolfSSL
+ - name: Clone native wolfSSL
+ uses: actions/checkout@v4
+ with:
+ repository: 'wolfssl/wolfssl'
+ path: IDE/Android/app/src/main/cpp/wolfssl
+
+ # Copy options.h.in to blank options.h
+ - name: Create blank options.h
+ run: cp IDE/Android/app/src/main/cpp/wolfssl/wolfssl/options.h.in IDE/Android/app/src/main/cpp/wolfssl/wolfssl/options.h
+
+ # Setup Java
+ - name: Setup java
+ uses: actions/setup-java@v4
+ with:
+ distribution: ${{ inputs.jdk_distro }}
+ java-version: ${{ inputs.jdk_version }}
+
+ # Gradle assembleDebug
+ - name: Gradle assembleDebug
+ run: cd IDE/Android && ls && ./gradlew assembleDebug
+
+ # Gradle assembleDebugUnitTest
+ - name: Gradle assembleDebugUnitTest
+ run: cd IDE/Android && ls && ./gradlew assembleDebugUnitTest
+
+ # Gradle assembleDebugAndroidTest
+ - name: Gradle assembleDebugAndroidTest
+ run: cd IDE/Android && ls && ./gradlew assembleDebugAndroidTest
+
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index a8b489a..e69cbaf 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -118,3 +118,18 @@ jobs:
jdk_version: ${{ matrix.jdk_version }}
wolfssl_configure: ${{ matrix.wolfssl_configure }}
+ # ----------------------- Android Gradle build ------------------------
+ # Run Android gradle build over PR code, only running on Linux with one
+ # JDK/version for now.
+ android-gradle:
+ strategy:
+ matrix:
+ os: [ 'ubuntu-latest' ]
+ jdk_version: [ '21' ]
+ name: Android Gradle (${{ matrix.os }} Zulu JDK ${{ matrix.jdk_version }})
+ uses: ./.github/workflows/android_gradle.yml
+ with:
+ os: ${{ matrix.os }}
+ jdk_distro: "zulu"
+ jdk_version: ${{ matrix.jdk_version }}
+
diff --git a/IDE/Android/.idea/misc.xml b/IDE/Android/.idea/misc.xml
index 547df14..6d2b9cf 100644
--- a/IDE/Android/.idea/misc.xml
+++ b/IDE/Android/.idea/misc.xml
@@ -13,4 +13,11 @@
+
+
+
\ No newline at end of file
diff --git a/IDE/Android/app/build.gradle b/IDE/Android/app/build.gradle
index 742f97c..870108b 100644
--- a/IDE/Android/app/build.gradle
+++ b/IDE/Android/app/build.gradle
@@ -1,11 +1,14 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 30
+ compileSdk 33
defaultConfig {
applicationId "com.example.wolfssl"
- minSdkVersion 30
- targetSdkVersion 30
+ /* Min SDK should stay at 24 to detect if we try to use newer APIs
+ * than were available in that Android SDK. We have users who are still
+ on SDK 24 (ref ZD 18311) */
+ minSdkVersion 24
+ targetSdkVersion 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@@ -15,6 +18,10 @@ android {
}
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_11
+ targetCompatibility JavaVersion.VERSION_11
+ }
buildTypes {
release {
minifyEnabled false
@@ -26,14 +33,18 @@ android {
path "src/main/cpp/CMakeLists.txt"
}
}
+ sourceSets {
+ main.java.srcDirs += '../../src/java'
+ test.java.srcDirs += '../../src/test'
+ }
namespace 'com.example.wolfssl'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
- testImplementation 'junit:junit:4.12'
+ implementation 'com.android.support.constraint:constraint-layout:2.0.4'
+ testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
diff --git a/IDE/Android/app/src/main/AndroidManifest.xml b/IDE/Android/app/src/main/AndroidManifest.xml
index 237679f..c3d43e9 100644
--- a/IDE/Android/app/src/main/AndroidManifest.xml
+++ b/IDE/Android/app/src/main/AndroidManifest.xml
@@ -1,6 +1,5 @@
-
-
+
diff --git a/IDE/Android/app/src/main/cpp/CMakeLists.txt b/IDE/Android/app/src/main/cpp/CMakeLists.txt
index bbae83b..d06b7fe 100644
--- a/IDE/Android/app/src/main/cpp/CMakeLists.txt
+++ b/IDE/Android/app/src/main/cpp/CMakeLists.txt
@@ -11,6 +11,10 @@ project("wolfssljni-gradle" C ASM)
set(wolfssljni_DIR ${CMAKE_SOURCE_DIR}/../../../../../../)
set(wolfssl_DIR ${CMAKE_SOURCE_DIR}/wolfssl/)
+# set warnings as errors, used in this example project but may be different
+# in production apps/environments.
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror")
+
# ------------------------- wolfSSL Normal vs. FIPS Ready Selection --------------------------------
# Select if wolfSSL is normal ("normal") or FIPS Ready ("fipsready")
# wolfSSL FIPS Ready is available for download on the wolfssl.com download page. For more
@@ -222,7 +226,10 @@ list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_bn.c)
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_asn1.c)
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_certman.c)
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_crypto.c)
+list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_load.c)
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_misc.c)
+list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_p7p12.c)
+list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_sess.c)
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/x509.c)
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/x509_str.c)
diff --git a/IDE/Android/app/src/main/java/com/example/wolfssl/MainActivity.java b/IDE/Android/app/src/main/java/com/example/wolfssl/MainActivity.java
index 9080f6f..e3ab248 100644
--- a/IDE/Android/app/src/main/java/com/example/wolfssl/MainActivity.java
+++ b/IDE/Android/app/src/main/java/com/example/wolfssl/MainActivity.java
@@ -22,10 +22,6 @@
package com.example.wolfssl;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Environment;
-import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
@@ -35,17 +31,11 @@ import android.widget.TextView;
import com.wolfssl.WolfSSL;
import com.wolfssl.WolfSSLException;
import com.wolfssl.provider.jsse.WolfSSLProvider;
-import com.wolfssl.provider.jsse.WolfSSLX509;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Provider;
import java.security.Security;
-import java.security.cert.CertificateException;
public class MainActivity extends AppCompatActivity {
@@ -55,7 +45,7 @@ public class MainActivity extends AppCompatActivity {
TextView tv = (TextView) findViewById(R.id.sample_text);
try {
- testLoadCert(tv);
+ testFindProvider(tv);
} catch (Exception e) {
e.printStackTrace();
}
@@ -72,23 +62,11 @@ public class MainActivity extends AppCompatActivity {
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText("wolfSSL JNI Android Studio Example App");
-
- if (!Environment.isExternalStorageManager()) {
- Intent intent = new Intent(
- Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
- Uri uri = Uri.fromParts("package", getPackageName(), null);
- intent.setData(uri);
- startActivity(intent);
- }
}
- public void testLoadCert(TextView tv)
+ public void testFindProvider(TextView tv)
throws NoSuchProviderException, NoSuchAlgorithmException,
- KeyStoreException, IOException, CertificateException,
WolfSSLException {
- String file = "/sdcard/examples/provider/all.bks";
- WolfSSLX509 x509;
- KeyStore ks;
WolfSSL.loadLibrary();
@@ -100,11 +78,8 @@ public class MainActivity extends AppCompatActivity {
System.out.println("Unable to find wolfJSSE provider");
return;
}
+ else {
- ks = KeyStore.getInstance("BKS");
- ks.load(new FileInputStream(file), "wolfSSL test".toCharArray());
-
- x509 = new WolfSSLX509(ks.getCertificate("server").getEncoded());
- tv.setText("Server Certificate Found:\n" + x509.toString());
+ }
}
-}
+}
\ No newline at end of file
diff --git a/IDE/Android/app/src/main/res/layout/activity_main.xml b/IDE/Android/app/src/main/res/layout/activity_main.xml
index 1e49ea6..e9e3b41 100644
--- a/IDE/Android/app/src/main/res/layout/activity_main.xml
+++ b/IDE/Android/app/src/main/res/layout/activity_main.xml
@@ -8,9 +8,13 @@
+ android:text="Test Provider Lookup"
+ app:layout_constraintBottom_toTopOf="@+id/sample_text"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />