我曾經在SimpleJNI直接做mm是可以確定cpp被編譯到,
但是如果將此sample code移至vendor/realtek下, 重新rename, 在jni資料夾下,Android.mk故意造成錯誤, 此時編譯是會有報錯, 將Android.mk改回正確, 故意在native.cpp製造錯誤code, 此時卻沒有任何報錯?
如果將Android.mk下的LOCAL_PACKAGE_NAME拿出去搜尋.
./device/realtek/hercules/device.mk:PRODUCT_PACKAGES += RealtekGallery2
並且加入
./device/realtek/hercules/device.mk:PRODUCT_PACKAGES += haha
這時候就會發現native.cpp製造錯誤code的部分被報錯了.
相對應的aosp中的
packages/apps 可以透過find -name jni 找到Android.mk中的LOCAL_PACKAGE_NAME
我以Gallery2作為關鍵字搜尋, 可以在base.mk找到
/device/google/marlin/common/base.mk
此外也可以在此精簡你不必要的apk
但也有可能是因為
Android.mk裡面加入了
LOCAL_PROPRIETARY_MODULE
關閉後就可以編譯到jni的cpp了.
https://source.android.google.cn/devices/architecture/vndk?hl=zh-cn
official_android_code_backup/packages下有不少jni例子, 可以參考
必須先將selinux關閉
setenforce 0
getenforce
https://drive.google.com/file/d/1yTo_MWh_d4RETYLkXPzvbVGU7e8jyro5/view?usp=sharing
也可以由source code中修改
android\system\core\init\selinux.cpp
--- a/system/core/init/selinux.cpp
+++ b/system/core/init/selinux.cpp
@@ -76,7 +76,7 @@ selabel_handle* sehandle = nullptr;
enum EnforcingStatus { SELINUX_PERMISSIVE, SELINUX_ENFORCING };
EnforcingStatus StatusFromCmdline() {
- EnforcingStatus status = SELINUX_ENFORCING;
+ EnforcingStatus status = SELINUX_PERMISSIVE;
import_kernel_cmdline(false,
[&](const std::string& key, const std::string& value, bool in_qemu) {
@@ -85,7 +85,7 @@ EnforcingStatus StatusFromCmdline() {
}
});
- return status;
+ return SELINUX_PERMISSIVE;
}
沒有留言:
張貼留言