If you don't want to implement the logic to acquire the product list from your own server, another option would be to use pre-defined "dummy" product ids, like product id slots:
private static final String[] PRODUCTIDS = {"product1", "product2", "product3", etc. };
The getSkuDetails function will simply return null for non-existing product ids. So if you don't expect your product list to vary too often or too much, then you could just define a small number of product ids in your app, and skip null values returned by getSkuDetails.
If you want to add a new product, just use the id defined by the next unused slot in the developer console, and your app will list it without updating the app.
Deleting a product can be tricky, because inactive and deleted product ids will still be returned, so you could mark a product deleted using its description field - use a pre-defined constant, like "NOT AVAILABLE" and check for its presence in your app. If a product description equals to this constant, simply skip it and don't list it.
I know, I know. It's a dirty hack. But it works.