Wednesday, May 19, 2021

Android Studio: generate apk for ApkPure

 

You can upload your application to 3rd party like apkpure:

https://apkpure.com/submit-apk

In Anroid Studio 4, Compile option are:

  • APK
  • V1 (Jar Signature) checked
  • V2 (Full APK Signature) checked

Start Upload

  • Package Name    : com.example.com
  • What's new    : update
  • Your Name    : developer_name
  • Your Email    : developer_email@example.com

Android java: play-services-ads 20.1.0 and gradle 6.5+

 

We are going to

  1. implementation 'com.google.android.gms:play-services-ads:20.1.0'
  2. java compile with xlint to check deprecation api
  3. gradle 6.5+

Edit build.gradle project

...
buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
...
allprojects {

    repositories {
        jcenter()
        google()
    }

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:deprecation"
        }
    }
}
...

Edit build.gradle(:app)

...
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"
...
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.3.0'
    implementation 'com.google.android.gms:play-services-ads:20.1.0'
}
...

Edit AndroidManifest.xml

<manifest>
...
    <application>
    ...
        <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
...


# main_activity.xml
...
    <!-- 20210220 -->
    <android.widget.FrameLayout
        android:id="@+id/adContainerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/scroll_view"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        />
...


Edit MainActivity.java

...
    private FrameLayout adContainerView; // 20210220
    private AdView adView;
...  
    private Handler myHandler = new Handler(Looper.getMainLooper()); // new Handler() deprecated 20210220  
...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      ...
      MobileAds.initialize(this, new OnInitializationCompleteListener() {
         @Override
         public void onInitializationComplete(InitializationStatus initializationStatus) {
         }
      });
      adContainerView = findViewById(R.id.adContainerView);
      // Step 1 - Create an AdView and set the ad unit ID on it.
      adView = new AdView(this);
      // Banner test = ca-app-pub-3940256099942544/6300978111
      adView.setAdUnitId("ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"); // CHANGE IT
      adContainerView.addView(adView);
      loadBanner();
      ...
    }

    // 20210220 start
    private void loadBanner() {
        // Create an ad request. Check your logcat output for the hashed device ID
        // to get test ads on a physical device, e.g.,
        // "Use AdRequest.Builder.addTestDevice("ABCDE0123") to get test ads on this
        // device."
        //AdRequest adRequest = new AdRequest.Builder().addTestDevice("ABCDE0123").build();
        AdRequest adRequest = new AdRequest.Builder().build();

        AdSize adSize = getAdSize();
        // Step 4 - Set the adaptive ad size on the ad view.
        adView.setAdSize(adSize);


        // Step 5 - Start loading the ad in the background.
        adView.loadAd(adRequest);
    }

    private AdSize getAdSize() {
        // Step 2 - Determine the screen width (less decorations) to use for the ad width.
        //Display display = getWindowManager().getDefaultDisplay(); // deprecated 20210220

        DisplayMetrics outMetrics = new DisplayMetrics();
        // display.getMetrics(outMetrics); // deprecated 20210220
        outMetrics = getApplicationContext().getResources().getDisplayMetrics(); //

        float widthPixels = outMetrics.widthPixels;
        float density = outMetrics.density;

        int adWidth = (int) (widthPixels / density);

        // Step 3 - Get adaptive ad size and return for setting on the ad view.
        return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
    }
    // 20210220 end
...