小编The*_*rer的帖子

绕过Android的隐藏API限制

从Android Pie开始,限制了对某些隐藏类,方法和字段的访问。在使用Pie之前,仅通过反射即可使用这些隐藏的非SDK组件非常容易。

但是,现在,尝试访问诸如的组件时,面向API 28(Pie)或更高版本的应用将遇到ClassNotFoundException,NoSuchMethodError或NoSuchFieldException异常Activity#createDialog()。对于大多数人来说,这很好,但是作为喜欢使用该API的人,这可能会使事情变得困难。

如何解决这些限制?

android

12
推荐指数
4
解决办法
3052
查看次数

Android Kotlin 测试。lateinit 属性 _db 尚未初始化

我的代码:

abstract class DbTest {

    @Rule
    @JvmField
    val countingTaskExecutorRule = CountingTaskExecutorRule()

    private lateinit var _db : AppDatabase

    val db: AppDatabase
        get() = _db

    @Before
    fun initDb() {
        _db = Room.inMemoryDatabaseBuilder(
                InstrumentationRegistry.getInstrumentation().context,
                AppDatabase::class.java
        ).build()
    }

    @After
    fun closeDb() {
        countingTaskExecutorRule.drainTasks(10, TimeUnit.SECONDS)
        _db.close()
    }
}

@RunWith(AndroidJUnit4::class)
class PlantDaoTest : DbTest() {

    @get:Rule
    var instantTaskExecutorRule = InstantTaskExecutorRule()

    @Test
    fun insert_one_plant() {
        val plant = Plant(plantId = 1, name="Plant1")
        db.plantDao.insertOnePlant(plant)

        val retrievedPlant = db.plantDao.getPlant(1)
        assert(plant.name==retrievedPlant.name)

    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行 PlantDaoTest 时,我看到这个错误:kotlin.UninitializedPropertyAccessException: lateinit property _db has …

testing android kotlin

8
推荐指数
2
解决办法
1458
查看次数

getIntent().getExtras() 返回 null FCM

我花了几个小时研究这个但没有运气,所以我在这里问。我已经检查过这些问题但无济于事:

\n\n\n\n

直到今天(AFAIK \xe2\x80\x94 我已经有一段时间没有测试它了),Firebase Cloud Messaging 工作得很好。我可以从 Firebase 控制台发送包含数据的通知,并且使用getIntent().getExtras()将允许我从应用程序访问该数据。

\n\n

然而,今天我发送了一条测试通知,但点击它并没有执行预期的操作。经过一番挖掘,我发现无论如何getIntent().getExtras()都会返回。null这是相关代码:

\n\n
private void respondToNotificationClick() {\n    if (getIntent().getExtras() != null) {\n        Log.e("NOTIF", "NOTIF");\n        //...\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

onCreate()(此方法在主活动和主活动中调用onResume()。)

\n\n

但该日志永远不会被打印,如果我尝试在语句Intent.getExtras()之外记录if,我会得到一个 NPE。

\n\n

我怀疑这与 Firebase 11 与 10 有关,或者这个应用程序的目标是 API 26,但我就是不知道如何修复它,而且 Google 的文档并不总是最有帮助的。

\n\n

这里发生了什么?这是一个已知问题吗?是因为我正在使用测试版 API(尽管它应该已经最终确定)?

\n

android firebase firebase-cloud-messaging

1
推荐指数
1
解决办法
2418
查看次数

麻烦与sed:"坏模式"

我正在研究一个在Android上运行的脚本(因此奇怪的shebang路径).它涉及使用sed注释掉指定文件中的某些代码块.目前,我正在尝试将整个sed命令传递给函数,但我在这方面遇到了很多麻烦.

这是脚本:

#!/system/bin/sh

REM_RCTD=$1
REM_CCMD=$2
REM_TRITON=$3
DEVICE_CODE=$4

COLOR_GRN_PRE="<font color='#00ff00'>"
COLOR_YEL_PRE="<font color='#ffff00'>"
COLOR_POS="</font>"

YELLOW=0
GREEN=1

echoAndExec() {
    CMD="$2"

    if [ "$1" = ${YELLOW} ]; then
        echo "$COLOR_YEL_PRE $CMD $COLOR_POS"
    elif [ "$1" = ${GREEN} ]; then
        echo "$COLOR_GRN_PRE $CMD $COLOR_POS"
    fi

    ${CMD} || exit 1
}

if [ "$REM_RCTD" = "true" ]
then

    CMD="sed -ir -e \_^# LG RCT(Rooting Check Tool)$_,/^$/{/^(#\|$)/!s/^/#/} init.lge.rc"
    echoAndExec ${YELLOW} "${CMD}"
fi

if [ "$REM_CCMD" = "true" ]
then

    CMD="sed -ir -e \_^service …
Run Code Online (Sandbox Code Playgroud)

shell android sed

1
推荐指数
1
解决办法
286
查看次数