{ "id": "164677", "key": "TIMOB-24176", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "18246", "name": "Hyperloop 2.0.1", "archived": false, "released": true, "releaseDate": "2017-03-17" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-12-12T21:21:24.000+0000", "created": "2016-11-25T00:18:52.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "android", "hyperloop" ], "versions": [], "issuelinks": [ { "id": "53817", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "outwardIssue": { "id": "164912", "key": "TIMOB-24201", "fields": { "summary": "Hyperloop: Android - Can't find requested module from .aar file in android", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "53549", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "163393", "key": "TIMOB-23945", "fields": { "summary": "Hyperloop does not extract /jni//*.so files from an aar", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2017-03-24T14:53:41.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" }, { "id": "13715", "name": "Hyperloop", "description": "Hyperloop project" } ], "description": "Some Android libs use the Java Native interface (JNI). I've noticed that Hyperloop doesn't copy these external libs to the final APK. They're usually located inside .AAR's *lib* folder.\r\n\r\nTake GoogleVR SDK, for example.\r\n\r\n!Screen Shot 2016-11-25 at 10.14.12 am.png|thumbnail!\r\n\r\nYou can see that these libs are inside the *build* folder. All good!\r\nProblem is, they're not copied to the final APK:\r\n\r\n!Screen Shot 2016-11-25 at 10.16.02 am.png|thumbnail!\r\n\r\nI can provide an example project via e-mail.\r\nThis exception will be thrown:\r\n\r\n{code:java}\r\n[ERROR] HyperloopProxy: (main) [366,366] Exception during instantiation of class 'com.google.vr.sdk.widgets.pano.VrPanoramaView'\r\n[ERROR] HyperloopProxy: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file \"/data/app/com.loopmodules.googlevr-1/base.apk\"],nativeLibraryDirectories=[/data/app/com.loopmodules.googlevr-1/lib/arm, /data/app/com.loopmodules.googlevr-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn't find \"libpanorenderer.so\"\r\n[ERROR] HyperloopProxy: \tat java.lang.Runtime.loadLibrary(Runtime.java:379)\r\n[ERROR] HyperloopProxy: \tat java.lang.System.loadLibrary(System.java:1086)\r\n[ERROR] HyperloopProxy: \tat com.google.vr.sdk.widgets.pano.VrPanoramaRenderer.(VrPanoramaRenderer.java:28)\r\n[ERROR] HyperloopProxy: \tat com.google.vr.sdk.widgets.pano.VrPanoramaView.createRenderer(VrPanoramaView.java:101)\r\n[ERROR] HyperloopProxy: \tat com.google.vr.sdk.widgets.pano.VrPanoramaView.createRenderer(VrPanoramaView.java:14)\r\n[ERROR] HyperloopProxy: \tat com.google.vr.sdk.widgets.common.VrWidgetView.initializeRenderingView(VrWidgetView.java:323)\r\n[ERROR] HyperloopProxy: \tat com.google.vr.sdk.widgets.common.VrWidgetView.init(VrWidgetView.java:232)\r\n[ERROR] HyperloopProxy: \tat com.google.vr.sdk.widgets.common.VrWidgetView.(VrWidgetView.java:185)\r\n[ERROR] HyperloopProxy: \tat com.google.vr.sdk.widgets.pano.VrPanoramaView.(VrPanoramaView.java:94)\r\n[ERROR] HyperloopProxy: \tat java.lang.reflect.Constructor.newInstance(Native Method)\r\n[ERROR] HyperloopProxy: \tat hyperloop.ClassProxy.newInstance(ClassProxy.java:89)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.kroll.runtime.v8.V8Runtime.nativeRunModule(Native Method)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.kroll.runtime.v8.V8Runtime.doRunModule(V8Runtime.java:189)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.kroll.KrollRuntime.runModule(KrollRuntime.java:241)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.titanium.TiLaunchActivity.loadActivityScript(TiLaunchActivity.java:102)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.titanium.TiLaunchActivity.windowCreated(TiLaunchActivity.java:150)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.titanium.TiRootActivity.windowCreated(TiRootActivity.java:107)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.titanium.TiBaseActivity.onCreate(TiBaseActivity.java:673)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.titanium.TiLaunchActivity.onCreate(TiLaunchActivity.java:143)\r\n[ERROR] HyperloopProxy: \tat org.appcelerator.titanium.TiRootActivity.onCreate(TiRootActivity.java:96)\r\n[ERROR] HyperloopProxy: \tat android.app.Activity.performCreate(Activity.java:6372)\r\n[ERROR] HyperloopProxy: \tat android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)\r\n[ERROR] HyperloopProxy: \tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2432)\r\n[ERROR] HyperloopProxy: \tat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2539)\r\n[ERROR] HyperloopProxy: \tat android.app.ActivityThread.access$900(ActivityThread.java:168)\r\n[ERROR] HyperloopProxy: \tat android.app.ActivityThread$H.handleMessage(ActivityThread.java:1378)\r\n[ERROR] HyperloopProxy: \tat android.os.Handler.dispatchMessage(Handler.java:102)\r\n[ERROR] HyperloopProxy: \tat android.os.Looper.loop(Looper.java:150)\r\n[ERROR] HyperloopProxy: \tat android.app.ActivityThread.main(ActivityThread.java:5665)\r\n[ERROR] HyperloopProxy: \tat java.lang.reflect.Method.invoke(Native Method)\r\n[ERROR] HyperloopProxy: \tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)\r\n[ERROR] HyperloopProxy: \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689)\r\n{code}\r\n\r\n", "attachment": [ { "id": "60779", "filename": "Screen Shot 2016-11-25 at 10.14.12 am.png", "author": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "created": "2016-11-25T00:14:25.000+0000", "size": 44290, "mimeType": "image/png" }, { "id": "60778", "filename": "Screen Shot 2016-11-25 at 10.16.02 am.png", "author": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "created": "2016-11-25T00:16:14.000+0000", "size": 45323, "mimeType": "image/png" } ], "flagged": false, "summary": "Hyperloop: Android - JNI libs should be included in APK", "creator": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "subtasks": [], "reporter": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "environment": "Hyperloop 2.0.0", "closedSprints": [ { "id": 770, "state": "closed", "name": "2016 Sprint 25 SDK", "startDate": "2016-12-03T01:53:07.491Z", "endDate": "2016-12-17T01:53:00.000Z", "completeDate": "2016-12-21T03:19:43.884Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "401843", "author": { "name": "sdarda", "key": "sdarda", "displayName": "Sharif AbuDarda", "active": false, "timeZone": "Asia/Dhaka" }, "body": "Hello, Please provide a sample project for us to test the issue. Thanks.", "updateAuthor": { "name": "sdarda", "key": "sdarda", "displayName": "Sharif AbuDarda", "active": false, "timeZone": "Asia/Dhaka" }, "created": "2016-11-25T18:47:29.000+0000", "updated": "2016-11-25T18:47:29.000+0000" }, { "id": "401844", "author": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "body": "Like I said, I can provide it by email. Can I have yours?\r\n", "updateAuthor": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "created": "2016-11-25T23:38:51.000+0000", "updated": "2016-11-25T23:38:51.000+0000" }, { "id": "401860", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey [~rdperottoni], I wondered why it doesn't work on 2.0.0, because it should be fixed in TIMOB-23945 or it's some other use-case for this one. Thx! \r\n\r\n*EDIT*: So if I get it correctly, the linked ticket copies it to the build directory, but not to the APK? We didn't do much more than that, I thought the Android build would take care of the rest. \r\n\r\n*EDIT 2*: Looking at [this gist|https://gist.github.com/khernyo/4226923#file-build-gradle-L31-L34], we could do the same on our JS side.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-27T19:46:39.000+0000", "updated": "2016-11-27T19:51:11.000+0000" }, { "id": "401861", "author": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "body": "Hey @Hans Knoechel. \r\nYes, that's exactly it. It gets copied to the build folder but not to the APK.", "updateAuthor": { "name": "rdperottoni", "key": "rdperottoni", "displayName": "Rodolfo Perottoni", "active": true, "timeZone": "Australia/Brisbane" }, "created": "2016-11-27T22:39:18.000+0000", "updated": "2016-11-27T22:39:18.000+0000" }, { "id": "402431", "author": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~rdperottoni] This has been fixed, could you make sure you are using {{Hyperloop 2.0.0}} where this issue has been addressed?", "updateAuthor": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-12-01T20:03:57.000+0000", "updated": "2016-12-01T20:03:57.000+0000" }, { "id": "402525", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~gmathews] I tested it, it's copies to the build dir but not the generated APK.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-12-03T19:39:00.000+0000", "updated": "2016-12-03T19:39:00.000+0000" }, { "id": "402567", "author": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "body": "master: https://github.com/appcelerator/hyperloop.next/pull/108\r\n2_0_X: https://github.com/appcelerator/hyperloop.next/pull/109", "updateAuthor": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-12-05T18:19:26.000+0000", "updated": "2016-12-05T18:19:26.000+0000" }, { "id": "403131", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~gmathews] Have you tested the changes already? I think [~cwilliams] wrote {{libs}} instead of {{lib}} for a reason, so I'd like to clear that before merging. Thx!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-12-11T10:23:00.000+0000", "updated": "2016-12-11T10:23:00.000+0000" }, { "id": "414744", "author": { "name": "amukherjee", "key": "amukherjee", "displayName": "Abir Mukherjee", "active": true, "timeZone": "America/Los_Angeles" }, "body": "NPM Version: 2.15.9\r\nNode Version: 4.5.0\r\nMac OS: 10.12.3\r\nAppc CLI: 6.1.0\r\nAppc CLI NPM: 4.2.8\r\nAppcelerator Studio, build: 4.8.1.201612050850\r\nXcode 8.2.1\r\nHyperloop 2.0.1\r\nTitanium SDK version: 6.0.3.v20170320120738\r\n\r\nVerified the fix is present in hyperloop 2.0.1. I packaged an Android app that uses the JNI libs. I then checked the apk file and verified that the appropriate libraries were present in that file.", "updateAuthor": { "name": "amukherjee", "key": "amukherjee", "displayName": "Abir Mukherjee", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-03-22T15:52:41.000+0000", "updated": "2017-03-22T15:52:41.000+0000" }, { "id": "415264", "author": { "name": "mrahman", "key": "mrahman", "displayName": "Mostafizur Rahman", "active": true, "timeZone": "Asia/Dhaka" }, "updateAuthor": { "name": "mrahman", "key": "mrahman", "displayName": "Mostafizur Rahman", "active": true, "timeZone": "Asia/Dhaka" }, "created": "2017-03-23T10:07:41.000+0000", "updated": "2017-03-23T10:07:41.000+0000" }, { "id": "415539", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~mrahman], i can't reproduce the error with the steps you provided, can you please double check your test code? The app successfully starts and shows a black screen with no errors reported. Your error message also indicates an error that is not related to this ticket. To keep things clear and not clutter this ticket please open another one if the issue persists, thanks!", "updateAuthor": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-03-24T14:53:41.000+0000", "updated": "2017-03-24T14:53:41.000+0000" } ], "maxResults": 11, "total": 11, "startAt": 0 } } }