1. multiDex配置
    • build.gradle 配置
          android {
              defaultConfig {
                      ...
                      multiDexEnabled true
                      ...
              }
              compileOptions {
                      sourceCompatibility JavaVersion.VERSION_1_8
                      targetCompatibility JavaVersion.VERSION_1_8
              }
              dexOptions {
                      javaMaxHeapSize "4g" //specify the heap size for the dex process
              }
          }
      
          dependencies {
              ...
                      implementation 'androidx.multidex:multidex:2.0.1'
              ...    
          }
      
    • gradle.properties 配置
          android.useAndroidX=true
          android.enableJetifier=true
      
          android.enableD8.desugaring = true
      
          //下面三相  debug版本一般不需要配置
          org.gradle.daemon=true
          org.gradle.configureondemand=true
          org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
      
    • 添加 继承MultiDexApplication的类
          新建  MyApplication.java 文件, 并在AndroidManifest.xml 中application添加android:name=".MyApplication"
          public class MyApplication extends MultiDexApplication {
              @Override
              protected void attachBaseContext(Context base) {
                      super.attachBaseContext(base);
                      MultiDex.install(this);
              }
          }
      
  2. 混淆
    • proguard-rules.pro
          //网上有说会导致某些Bug,目前使用时没遇到 
         -ignorewarnings  
         -dontpreverify
      
  3. Gradle和Gradle Plug版本 (File -> Project Structure)
    • 在网上查找下使用的版本是否对应。
    • 出现 unexpected element found in 错误时,请查看自己的gradle插件版本参考
  4. 项目依赖
    • 使用 configurations.all 强制指定
          android {
              .....
          }
      
          //不能解决所有依赖,类似a.a.a.a.b这种,需要自行查找处理
          configurations.all {
              resolutionStrategy {
                      // - 下列force 删除,根据提示强制指向对应版本  -- debug版本不需要配置
                      //force 'com.google.android.gms:play-services-location:17.0.0'
      
                      failOnVersionConflict()
              }
          }
      
  5. 广告展示
    • 所有广告相关处理都尽量放在UI线程
          app.runOnUiThread(new Runnable() {
              @Override
              public void run() {
                  InterstitialAd.showAd(INTERSTITIAL_UNIT_ID, null);
              }
          });
      
    • 注意广告初始化的位置
      1. 在继承 Application的类中进行初始化,
      2. 在继承 Activity 的类中初始化
    • 部分广告内部在关闭时,是关闭当前Activity。需要提前弄清楚
      1. 需要开启Activity时
        • 在AndroidManifest.xml中添加广告Activity
            <activity android:name="org.cocos2dx.javascript.AdActivity" />
        
        • 开启广告Activity。 mainActive 为主activity
            Intent intent = new Intent(this.mainActive, AdActivity.class);
            intent.putExtra(AdActivity.SID, sid);
            intent.putExtra(AdActivity.NAME, name);
            this.mainActive.startActivity(intent);
        
      • banner/插屏 需要自己写Layout。通过AndroidStudio添加xml文件,或者添加之后 invalidate 一下
        1. xml文件
              <?xml version="1.0" encoding="utf-8"?>
              <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:tools="http://schemas.android.com/tools"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
          
                  <RelativeLayout
                      android:id="@+id/express_container"
                      android:layout_width="320dp"
                      android:layout_height="50dp"
                      android:layout_alignParentBottom="true"
                      android:layout_centerHorizontal="true"
                      android:layout_gravity="center"
                      android:layout_marginStart="0dp"
                      android:layout_marginTop="0dp"
                      android:layout_marginEnd="0dp"
                      android:layout_marginBottom="0dp"
                      android:visibility="visible" />
              </RelativeLayout>
          
        2. 创建view
              //读取xml文件
              View layout = LayoutInflater.from(this).inflate(activity_adopen, null);
              //添加xml布局
              RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                      RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT);//WRAP_CONTENT
              addContentView(layout,adParams);
              //广告容器
              ViewGroup adView = (RelativeLayout) this.findViewById(R.id.express_container);
          
  6. 在哪里写广告逻辑
    • 建议借用cocos的SDKClass
      1. 在 jsb_default/link 根目录中找到 package.json 添加字段
            "serviceClassPath": [
                        "org.cocos2dx.javascript.service.xxx"
                    ] 
        
      2. 在service下面建立自己的ad.java,并书写逻辑
  7. 回调js
    
        String cmd = "window['XXX_Call']('reward_show_fail','" + instance.rewardType + "','" +  instance.rewardPart + "')";
        callJS(cmd);
        public void callJS (String cmd) {
            // 一定要在 GL 线程中执行
            app.runOnGLThread(new Runnable() {
                @Override
                public void run() {
                    Cocos2dxJavascriptJavaBridge.evalString(cmd);
                }
            });
        } 
    
  8. 特别的(creator)接入穿山甲sdk时遇到
        repositories {
            flatDir {
                dirs 'libs'
            }
        }
    
        dependencies {
            //剔除 '*.aar'
            implementation fileTree(dir: 'libs', include: ['*.jar'])
        }
    
  9. 包名
    • create有 gameapp 两个目录,两个目录中的 package都改为自己的包名,不然在引用 R 时,会出错
    • 或者 删除game文件,并在setting.gradle中将 ':game'删除 (只打android包时)
  10. px 和 pd的转换
        /**
        * 获取屏幕的宽 单位px
        *
        * @return int
        */
        public  int getScreenWidth() {
            return getResources().getDisplayMetrics().widthPixels;
        }
    
        /**
        * 获取屏幕的高 单位px
        *
        * @return int
        */
        public  int getScreenHeight() {
            return getResources().getDisplayMetrics().heightPixels;
        }
        
        /**
        * dp转换px
        */
        public  int dp2px(int dip) {
            final float scale = getResources().getDisplayMetrics().density;
            return (int) (dip * scale + 0.5f);
        }
    
        /**
        * px转换dp
        */
        public  int px2dp(int px) {
            final float scale = getResources().getDisplayMetrics().density;
            return (int) (px / scale + 0.5f);
        }  
    
  11. 后台两个进程问题(接入广告后,部分会有两个进程)
    • AndroidManifest 中将 taskAffinity 删除
  12. 根据PROP_COMPILE_SDK_VERSION导入对应的support-v4库
posted on 2020-12-29 16:14  银尘代号  阅读(157)  评论(0编辑  收藏  举报