Skip to content

Cannot build Android Mode sketch that uses any native code libraries #738

Open
@ajavamind

Description

@ajavamind

Description

I am working on converting a Processing OpenCV library to use Android: https://github.com/cansik/opencv-processing
My change requires adding andoid native code references to the library build
However the SDK ignores native android libraries so it is not possible to build an Android apk that requires native code.
Fixing this would open up a new set of Android libraries not currently possible, such as OpenCV, UVC cameras,
Gstreamer +Android, etc.

Expected Behavior

Allow Android Mode libraries to include native code to expand sketch functions on Android devices

Current Behavior

Build folder: C:\Users\andym\AppData\Local\Temp\android8678558073199361583sketch
Exception in thread "Thread-12" java.lang.NullPointerException: Cannot read the array length because "list" is null
at processing.app.Library.wrapFiles(Library.java:427)
at processing.app.Library.getApplicationExports(Library.java:437)
at processing.mode.android.AndroidBuild.copyImportedLibs(AndroidBuild.java:839)
at processing.mode.android.AndroidBuild.createAppModule(AndroidBuild.java:476)
at processing.mode.android.AndroidBuild.createProject(AndroidBuild.java:263)
at processing.mode.android.AndroidBuild.build(AndroidBuild.java:224)
at processing.mode.android.AndroidMode.handleRunDevice(AndroidMode.java:294)
at processing.mode.android.AndroidEditor$17.run(AndroidEditor.java:421)

Steps to Reproduce

For opencv-processing I changed build support for all android platforms
gradlew.bat releaseProcessingLib -PjavacppPlatform=android-arm,android-arm64,android-x86,android-x86_64

Your Environment

  • Processing version: SDK 4.2
  • Operating System and OS version: Windows 11

Possible Causes / Solutions

I believe problem is caused by a line in processing.app.Library:
https://github.com/processing/processing4/blob/main/app/src/processing/app/Library.java

static FilenameFilter libraryFolderFilter = (dir, name) -> {
// skip .DS_Store files, .svn folders, etc
if (name.charAt(0) == '.') return false;
// ha, the sftp library still has one [fry 220121]
if (name.equals("CVS")) return false;
if (name.equals("export.txt")) return false;

File file = new File(dir, name);
if (file.isDirectory()) {
  //noinspection RedundantIfStatement
  if (name.startsWith("macos") ||
      name.startsWith("windows") ||
      name.startsWith("linux")) {
      //name.startsWith("android")) {  // no libraries use this  =========>NOT TRUE UNCOMMENT THIS
    return false;
  }
}
return true;

};

There may be other changes needed, but until I can build my own SDK to test, this is what I know now.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions