[Android Apps and Games] tliebeck:
SystemPanel2 actually doesn't light the ad engine if the Plus key is there. I check for the Plus license before calling MobileAds.initialize().

I don't like ads either. Ads are what the Android userbase demands. I agree with most of what you say and wish everyone thought the same way you did. They don't. Not even a little bit. This thinking is a tiny tiny minority of Android users. Again, I support you, agree with you, and wish this wasn't the case....but IT IS. People think all software is free (and supposed to be free) except for Office and Photoshop.

Here's the entirety of the SystemPanel2 code that touches the ad engine:

package nextapp.sp.ui.ad;

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.NativeExpressAdView;

import nextapp.sp.AppEnvironment;
import nextapp.sp.R;
import nextapp.sp.SystemPanel;
import nextapp.sp.ui.util.LayoutUtil;

public class AdManager {

public static void init(Context context) {
if (AppEnvironment.getModuleStatePlus(context).available) {
return;
}
MobileAds.initialize(context);
}

private static AdRequest buildAdRequest(Context context) {
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
if (SystemPanel.DEBUG_AD) {
Log.d(SystemPanel.LOG_TAG, "Ad test mode:" + adRequest.isTestDevice(context));
}
return adRequest;
}

public static void request(NativeExpressAdView adView) {
AdRequest adRequest = buildAdRequest(adView.getContext());
adView.loadAd(adRequest);
}

public static void request(AdView adView) {
AdRequest adRequest = buildAdRequest(adView.getContext());
adView.loadAd(adRequest);
}

public static NativeAdCardView createAdIfRequired(Context context) {
if (AppEnvironment.getModuleStatePlus(context).available) {
return null;
}

return new NativeAdCardView(context);
}

public static void installAdIfRequired(Context context, LinearLayout parent) {
installAdIfRequired(context, parent, null);
}

public static void installAdIfRequired(Context context, LinearLayout parent, View before) {
View view = createAdIfRequired(context);
if (view == null) {
return;
}
int margin = context.getResources().getDimensionPixelSize(R.dimen.card_element_margin);
view.setLayoutParams(LayoutUtil.linearWithMargins(true, margin, margin, margin, margin));

int targetIndex = before == null ? -1 : parent.indexOfChild(before);
if (targetIndex == -1) {
parent.addView(view);
} else {
parent.addView(view, targetIndex);
}
}
}

Note the ad engine not being initialized if Plus key is found. Plus key is checked for on each ad as well in case it is installed via IAP during the session.

Everything that touches the Internet is a proven malware vector. That said, it should not be possible for native ads to contain malware within the ads themselves (unless Google *really* sucked at implementing them). Native ads are simply icons and text, they don't provide any 3rd-party code.

Once you click on an ad of course, you're directed to either the Play Store or to a web site (as indicated by the ad). If you're visiting a web site, you're at the same risk level as browsing the web. (And I don't mean to suggest that's a low risk).

Screenshot attached showing SP2 with a native ad.