diff --git a/.github/workflows/android_gradle.yml b/.github/workflows/android_gradle.yml new file mode 100644 index 00000000..af67147d --- /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 a8b489a1..e69cbaf9 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 547df141..6d2b9cfd 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 742f97cf..870108bb 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 237679f2..c3d43e9f 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 bbae83bc..d06b7fe6 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 9080f6f3..e3ab2485 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 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 void onClick(View v) { TextView tv = (TextView) findViewById(R.id.sample_text); try { - testLoadCert(tv); + testFindProvider(tv); } catch (Exception e) { e.printStackTrace(); } @@ -72,23 +62,11 @@ protected void onCreate(Bundle savedInstanceState) { 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 void testLoadCert(TextView tv) 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 1e49ea6b..e9e3b412 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 @@