JPush:引用library/.aar文件的JPush

本文介绍如何在Android项目中使用Gradle快速集成极光推送服务,并通过示例代码展示了配置过程及自定义广播接收器实现推送消息处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司觉得app太多,客户用起来不方便要合成一个superapp使用,尴尬的是合成的app中用了多个推送,我的心情是蛋疼的先上一遍使用gradle3分钟集成jpush的方法,不多说,为了方便直接上build.gradle

android {
    defaultConfig {
        ndk {
            //选择要添加的对应cpu类型的.so库(不需要的删除即可)。
            abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a', 'x86', 'x86_64', 'mips', 'mips64'
        }

        manifestPlaceholders = [
                JPUSH_PKGNAME: "rr.jpush",
                JPUSH_APPKEY : "efd29524daf0f66e60c4113f", //JPush上注册的包名对应的appkey(*换成你的*)
                JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
        ]

    }

}

dependencies {
    compile 'cn.jiguang.sdk:jpush:3.0.3'  // 此处以JPush 3.0.3 版本为例。
    compile 'cn.jiguang.sdk:jcore:1.1.1'  // 此处以JCore 1.1.1 版本为例。
}

上完gradle,然后在application文件中进行初始化
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化sdk
        JPushInterface.setDebugMode(true);//正式版的时候设置false,关闭调试
        JPushInterface.init(this);
        //建议添加tag标签,发送消息的之后就可以指定tag标签来发送了
        Set<String> set = new HashSet<>();
        set.add("andfixdemo");//名字任意,可多添加几个
        JPushInterface.setTags(this, set, null);//设置标签
    }
}
初始化完了,就可以接收到推送消息了,但是我们要点击进入,这样就需要重写一个BroadCastReceiver,4大组件我们先声明
<receiver
            android:name="你的BroadCastReceiver路径"
            android:enabled="true">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required  用户注册SDK的intent-->
                <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required  用户接收SDK消息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required  用户接收SDK通知栏信息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required  用户打开自定义通知栏的intent-->
                <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!--Optional 用户接受Rich Push Javascript 回调函数的intent-->
                <action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->
                <category android:name="包名" />
            </intent-filter>
        </receiver>
public class MyReceiver extends BroadcastReceiver {
    private static final String TAG = "JPush";

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));

        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
            String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
            Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
            //send the Registration Id to your server...

        } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
            processCustomMessage(context, bundle);

        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");
            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);

        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用户点击打开了通知");
//
//          //打开自定义的Activity
//          Intent i = new Intent(context, TestActivity.class);
//          i.putExtras(bundle);
//          //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//          i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
//          context.startActivity(i);

        } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
            //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..

        } else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
            boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
            Log.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);
        } else {
            Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
        }
    }

    // 打印所有的 intent extra 数据
    private static String printBundle(Bundle bundle) {
        //...省略了
        return null;
    }

    //send msg to MainActivity
    private void processCustomMessage(Context context, Bundle bundle) {
       // ...//省略了
    }
}
好,现在说问题,要想在library或者aar中使用jpush推送,我们必须在主应用再配置一遍
manifestPlaceholders = [
                JPUSH_PKGNAME: "rr.jpush", //子应用的包名
                JPUSH_APPKEY : "efd29524daf0f66e60c4113f", //JPush上注册的包名对应的appkey(*换成你的*)
                JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
        ]



<think>好的,我现在需要解决用户遇到的Gradle构建问题。问题显示在配置根项目'Demo'时出现了错误,无法解析配置':classpath'的所有工件,特别是找不到com.kezong:fat-aar:1.2.17。用户已经尝试了多个仓库,包括MavenCentral、腾讯、华为和荣耀的镜像,但都没有找到这个依赖。首先,我要确认这个依赖是否存在。根据用户提供的错误信息,fat-aar的1.2.17版本在这些仓库中确实找不到。可能的原因是这个版本已被移除,或者仓库地址有变化。接下来,我需要检查fat-aar的官方文档或仓库,看看可用的版本和正确的仓库配置。 访问fat-aar的GitHub仓库(比如https://github.com/kezong/fat-aar-android),查看最新版本。假设发现最新版本是1.3.6,而用户使用的1.2.17可能已经过时。这时候,解决方案可能是升级到新版本,或者添加正确的仓库地址。如果用户必须使用1.2.17版本,可能需要检查是否有其他仓库托管了这个版本。例如,有些库可能托管在JitPack或其他私有仓库中。但根据用户提供的搜索路径,似乎都不存在。因此,更可能的是版本号有误,或者需要更换依赖库的仓库源。 另外,用户可能没有正确配置仓库。例如,fat-aar可能托管在JitPack上,需要在项目的build.gradle中添加JitPack的仓库地址。比如,在allprojects的repositories中添加maven {url 'https://jitpack.io'}。或者,用户可能应该使用其他方式引入这个依赖,比如使用插件DSL的正确语法,或者确认插件版本是否存在拼写错误。综合这些情况,正确的解决步骤应该是:首先建议用户检查依赖的版本是否存在,升级到最新版本;其次,添加正确的仓库源,如JitPack;最后,确保项目中的仓库配置正确,包括buildscript和allprojects部分的仓库声明。 在代码示例中,需要修改build.gradle文件,添加JitPack仓库,并更新依赖版本。同时,解释为什么需要这样做,以及各个步骤的作用,比如添加仓库是为了让Gradle能够从正确的源下载依赖,更新版本是为了使用可用的版本。 最后,相关问题可能涉及Gradle的其他配置问题,比如处理依赖冲突、使用其他仓库、插件管理或理解Gradle构建生命周期等。这些问题可以帮助用户进一步理解和解决类似的构建问题。</think>这个Gradle构建错误是由于缺少fat-aar插件仓库配置引起的。以下是解决方案: ### 解决方案 在项目的`build.gradle`文件中添加JitPack仓库配置: ```groovy // 项目根目录的build.gradle buildscript { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } // 添加JitPack仓库 } dependencies { classpath 'com.github.kezong:fat-aar:1.3.6' // 使用最新版本 // 其他classpath配置... } } allprojects { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } // 所有项目添加仓库 } } ``` ### 修改说明: 1. **添加JitPack仓库**:fat-aar插件现在托管在JitPack仓库 2. **更新插件版本**:原1.2.17版本已不可用,改用最新的1.3.6版本 3. **仓库位置**: - `buildscript.repositories`:影响构建脚本自身的依赖解析 - `allprojects.repositories`:影响项目模块的依赖解析 ### 验证是否生效: ```bash # 清理Gradle缓存 ./gradlew clean build --refresh-dependencies ``` ### 版本对照表: | 原版本 | 新版本 | 仓库源 | |--------|--------|--------| | 1.2.17 | 1.3.6 | JitPack |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值